2015-03-30 46 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