У меня есть код ниже. В двух словах - у меня есть два файла - читатель и данные. Мне нужно, чтобы несколько пользователей имели доступ к этим файлам, но они хранятся в учетной записи Box, поэтому каталог файлов отличается для каждого пользователя. Я создал код, который ДОЛЖЕН это сделать. Он отлично работает, когда я перехожу через код вручную, используя F8 или даже нажав F5 после того, как книга открыта. Однако мне нужно, чтобы он работал в рабочей книге. Когда я открываю его я получаю следующее сообщение об ошибке:Несоответствующая ошибка 1004
Run-time error '1004': Application-defined or object-defined error.
Это происходит в
Set directoryRange = ImSapMacroWorkbook.Worksheets("Users").Range(Cells(1, 2), Cells(lastUser, 2))
Я понятия не имею, почему это происходит в данный момент, но это не соответствует, так что я не был способный определить, почему это происходит. Если это имеет значение, это первый подпрогон в автообъекте. Никакие переменные даже не объявляются до этого.
Sub GrabData()
Dim DataWorkbook As Workbook
Dim ImSapMacroWorkbook As Workbook
Dim copyRange As Range
Dim pasteRange As Range
Dim directoryRange As Range
Dim LastRow As Integer
Dim lastUser As Integer
lastUser = ThisWorkbook.Worksheets("Users").Range("A1048576").End(xlUp).Row
Set directoryRange = ThisWorkbook.Worksheets("Users").Range(Cells(1, 2), Cells(lastUser, 2))
Set MacroWorkbook = ThisWorkbook
On Error GoTo nextUser
For Each c In directoryRange
Set DataWorkbook = Workbooks.Open(c.Value)
Exit For
nextUser:
Next c
LastRow = DataWorkbook.Worksheets("Sheet1").Range("A1048576").End(xlUp).Row
Set copyRange = DataWorkbook.Worksheets("Sheet1").Range(Cells(2, 1), Cells(LastRow, 36))
Set pasteRange = MacroWorkbook.Sheets("input").Cells(2, 1)
Call clearData
copyRange.Copy
MacroWorkbook.Activate
pasteRange.Select
ActiveSheet.Paste
End Sub
определенно, похоже, решил проблему - подтвердит как правильный ответ в течение 2 дней, когда stackoverflow позволит мне. – JakeMWP
Помните, что 'ThisWorkbook.Worksheets (« Пользователи »). Диапазон (ячейки (1, 2), ячейки (lastUser, 2))' эквивалентен 'ThisWorkbook.Worksheets (« Пользователи »). Диапазон (ActiveSheet.Cells (1, 2), ActiveSheet.Cells (lastUser, 2)) 'поэтому, если активный лист не является« Пользователи », тогда будет ошибка. Использование блока 'With ... End With' может предотвратить такую ошибку – barrowc