2015-03-30 6 views
0

У меня есть код ниже. В двух словах - у меня есть два файла - читатель и данные. Мне нужно, чтобы несколько пользователей имели доступ к этим файлам, но они хранятся в учетной записи 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 

ответ

1

Я думаю, что я нашел проблемно я выбежала

DataWorkbook.Worksheets("Sheet1").activate 

перед той частью, которая дает мне проблемы. Кажется, он исправил это - будет ждать, чтобы подтвердить несколько прогонов, так как в любом случае это было непоследовательно.

+0

определенно, похоже, решил проблему - подтвердит как правильный ответ в течение 2 дней, когда stackoverflow позволит мне. – JakeMWP

+1

Помните, что 'ThisWorkbook.Worksheets (« Пользователи »). Диапазон (ячейки (1, 2), ячейки (lastUser, 2))' эквивалентен 'ThisWorkbook.Worksheets (« Пользователи »). Диапазон (ActiveSheet.Cells (1, 2), ActiveSheet.Cells (lastUser, 2)) 'поэтому, если активный лист не является« Пользователи », тогда будет ошибка. Использование блока 'With ... End With' может предотвратить такую ​​ошибку – barrowc

Смежные вопросы