2015-03-30 52 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)) 

我不知道爲什麼會發生在這一點上,但它是不相符的,所以我一直沒能夠確定發生這種情況的原因。如果重要,這是auto_open子文件中的第一個子運行。在運行之前,甚至沒有變量被聲明。

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 

的problem-。似乎已經修復它 - 將等待幾個運行確認,因爲它反正不一致。

+0

絕對似乎已經解決了這個問題 - 將在2天內確認爲正確的答案,當stackoverflow會讓我。 – JakeMWP 2015-03-30 22:36:16

+1

請注意'ThisWorkbook.Worksheets(「Users」)。Range(Cells(1,2),Cells(lastUser,2))'相當於'ThisWorkbook.Worksheets(「Users」)。Range(ActiveSheet.Cells 1,2),ActiveSheet.Cells(lastUser,2))'所以如果活動工作表不是「用戶」,那麼會出現錯誤。使用'With ... End With'塊可以防止這種錯誤 – barrowc 2015-03-31 00:16:14