我在例行程序的开头有以下代码:
Background Fetch
在第二个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)
...
块之前,当我收到自动化错误时,一切似乎都很好:
运行时错误' -2147221080(800401a8)':
自动化错误
每个文件都是带有单个工作表的CSV文件。如果我在设置它们时查看本地窗口,它们会显示为With
。我将表单移至Worksheet/Sheet1
后,我注意到类型更改为ThisWorkbook
,我无法再引用Worksheet/Worksheet
,ws1
或{{1}使用各自的变量。变量在本地窗口中显示为工作表对象,并且似乎设置为对象,但是当我展开变量的节点时,它只是表示ws2
。
我以前在VBA中没有看到这种行为,所以任何解释或建议都会受到高度赞赏。
提前致谢。
答案 0 :(得分:2)
问题是当您从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)