如何在多个工作簿打开时在特定工作簿中引用正确的工作表?
Sub debug_tester() Dim A As Workbook Set A = Workbooks.Open("D:\a.xlsm") Dim B As Workbook Set B = Workbooks.Open("D:\b.xlsm") A.Sheets("sheet1_in_test").range("A1").Value = "test" 'pop out "subscript out of range" on this line End Sub
A中存在“sheet1_in_test”。如果将其更改为数字(例如,sheet(1)),则B将被更改。
编辑:纠正错别字。 工作簿A有一张名为“sheet1_in_test”的工作表。 工作簿B有一张名为“sheet1”的工作表。
编辑:谢谢sancho.s ! 看起来像Workbook.Open
不能引用工作簿时,位于它的子。 使用Set A = ThisWorkbook
似乎也适用。 我想知道为什么。
这个位于一个单独的工作簿,按预期执行
Sub open_test() Dim wb1 As Workbook Dim wb2 As Workbook Set wb1 = Workbooks.Open("C:\Users\user1\Documents\a.xlsx") Set wb2 = Workbooks.Open("C:\Users\user1\Documents\b.xlsx") wb1.Sheets("Hoja1").Range("A1").Value = "test" wb2.Sheets(1).Range("A1").Value = "test2" End Sub
尝试重现这一点。
使用Workbooks.Open()使打开的工作簿成为活动工作簿。 这就是使用工作表(1)进入工作簿B的原因。这是打开的最后一个工作簿,因此也是活动工作簿。 使用Workbook.Activate使A成为活动工作簿。
Sub debug_tester() Dim A As Workbook Set A = Workbooks.Open("D:\a.xlsm") Dim B As Workbook Set B = Workbooks.Open("D:\b.xlsm") A.Activate A.Sheets("sheet1_in_test").range("A1").Value = "test" End Sub
如果仍然出现“下标超出范围”消息,则“sheet1_in_test”工作表不在A工作簿中。 检查代码和工作表名称之间的拼写。 这假定您正在运行第三个工作簿中的代码。
如果从工作簿A运行此代码,Excel将closuresA的打开实例并重新打开它,但代码不会运行。 在这种情况下,你可以使用
Set A = ThisWorkbook
或者如果代码在工作簿B中使用
Set B = ThisWorkbook