VBA工作表自动化错误
我有一个程序开始下面的代码:VBA工作表自动化错误
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim ws3 As Worksheet
Set ws1 = Workbooks.Open(ThisWorkbook.Sheets(1).[b4]).Sheets(1)
Set ws2 = Workbooks.Open(ThisWorkbook.Sheets(1).[b6]).Sheets(1)
Set ws3 = Workbooks.Open(ThisWorkbook.Sheets(1).[b8]).Sheets(1)
ws1.Move after:=ThisWorkbook.Sheets("MAIN")
ws2.Move after:=ThisWorkbook.Sheets("MAIN")
ws3.Move after:=ThisWorkbook.Sheets("MAIN")
'// remove redundant data
With ws1
With .Range("A2:A" & .Cells(.Rows.Count, 1).End(xlUp).Row)
...
似乎一切都很好,直到第二With
块,当我得到一个自动化错误:
Run-time error '-2147221080 (800401a8)':
Automation Error
每的文件是带有单张纸的CSV文件,如果我在当地人窗口中查看它们,他们会按照我的预期显示为Worksheet/Sheet1
。然而,一旦我将表单移动到ThisWorkbook
,我注意到类型更改为Worksheet/Worksheet
,我不再使用各自的变量引用ws1
,ws2
或ws3
。这些变量在本地窗口中显示为工作表对象,并且似乎设置为一个对象,但是当我展开该变量的节点时,它仅表示<No Variables>
。
我还没有在VBA中见过这种行为,所以任何解释或建议将不胜感激。
在此先感谢。
问题是,当您从1工作簿移动工作表时,它将关闭工作簿。需要参考当前工作簿中的工作表,而不是打开的工作簿中的工作表。类似于下面的代码将起作用。
Sub tt()
Dim ws1 As Worksheet
Set ws1 = Workbooks.Open(ThisWorkbook.Sheets(1).[b1]).Sheets(1)
ws1_Name = ws1.Name
ws1.Move after:=ThisWorkbook.Sheets(1)
'// remove redundant data
With ThisWorkbook.Sheets(ws1_Name)
With .Range("A2:A" & .Cells(.Rows.Count, 1).End(xlUp).Row)
End With
End With
End Sub
您也可以重置WS1到正确的纸张
Set ws1 = ThisWorkBook.Sheets(ws1_Name)
我会投票,因为这是我得出的结论,但我仍然很想知道_why_这是怎么回事。 –
你在问为什么表格正在关闭,ws1正在丢失其参考文件,或者为什么ws1在移动时不保持与同一张表单链接? – 99moorem
为什么它不保持链接 - 如果你设置了一个对象,它应该设置对该对象的特定实例的引用。从一个工作簿移动到另一个工作簿不会更改_instance_,因此该变量仍应保持功能。 –
是不是傻的东西像WS1不受关注? – 99moorem
@ 99moorem不应该有所作为,因为我指的是在内存中设置的对象,但仍然无法工作 - 它似乎在保持指向对象的指针,而不是它的任何属性或方法。非常奇怪... –
你可以在出现错误后立即在窗口中输入(“A2:A”&.Cells(.Rows.Count,1).End(xlUp).Row).address吗?例如你可以手动重现吗? – 99moorem