【发布时间】:2015-07-20 08:43:42
【问题描述】:
我在例程开始时有以下代码:
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 块,当我收到自动化错误时,一切似乎都很好:
运行时错误'-2147221080 (800401a8)':
自动化错误
每个文件都是带有单个工作表的 CSV 文件,如果我在设置它们时查看本地窗口,它们会按我的预期显示为 Worksheet/Sheet1。然而,一旦我将工作表移动到ThisWorkbook,我注意到类型更改为Worksheet/Worksheet,并且我不再能够使用各自的变量引用ws1、ws2 或ws3。变量在本地窗口中显示为工作表对象,并且似乎设置为一个对象,但是当我展开变量的节点时,它只显示<No Variables>。
我以前在 VBA 中没有看到过这种行为,因此非常感谢任何解释或建议。
提前致谢。
【问题讨论】:
-
像ws1这样没有焦点的傻事吗?
-
@99moorem 不应该有所作为,因为我指的是内存中设置的对象,但仍然没有工作 - 它似乎保留了指向该对象的指针,但没有任何它的属性或方法。很奇怪……
-
您可以在收到错误后立即在窗口中执行 .Range("A2:A" & .Cells(.Rows.Count, 1).End(xlUp).Row).address 吗?例如可以手动复制吗?
-
不,即时窗口中的任何内容都不起作用(参考工作表变量),甚至
?ws1.Name任何访问变量属性或方法的尝试都不会导致自动化错误。 -
将源工作簿的引用保存在变量中(即
wb),然后引用它而不是依赖ThisWorkbook,因为使用多个工作簿可能会更改您当前的活动/此工作簿。跨度>