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”。如果我将其更改为数字(即表(1)),则B更改为。
编辑: 纠正错别字。工作簿A有一个名为“sheet1_in_test”的工作表。工作簿B有一个名为“sheet1”的工作表。
编辑:
谢谢 sancho.s !似乎Workbook.Open
无法在子工作簿上找到工作簿。使用Set A = ThisWorkbook
似乎也很有用。我想知道为什么会这样。
答案 0 :(得分:1)
此sub
位于单独的工作簿中,按预期执行
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
尝试复制这个。
答案 1 :(得分:-3)
使用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工作簿中。检查代码和工作表名称之间的拼写。这假设您正在运行第3个工作簿中的代码。
如果从工作簿A运行此代码,Excel将关闭A的打开实例并重新打开它,但代码不会运行。在这种情况下,您可以使用
Set A = ThisWorkbook
或者如果代码在工作簿B中使用
Set B = ThisWorkbook