我想参考第一个打开的工作簿。打开了2个工作簿:一个正在调用宏以执行,而另一个包含宏的工作簿。某种程度上,代码经常会流畅运行。但是有时,在访问第一个打开的工作簿中的数据时会出现引用错误:下标超出范围。
在这一行上,发生错误:
Set mastersheet = Workbooks(1).Sheets("Setting")
因此,集合中应该有两个工作簿。我要监督什么?请记住,第一个打开的工作簿没有固定名称,因此打开的工作簿的名称会更改。第二个工作簿,即包含要执行的宏的工作簿,不会更改其名称。
答案 0 :(得分:2)
不幸的是,您没有提供更多代码或有关宏所在的哪种类型的代码“容器”的任何信息。以下解决方案假定该宏位于工作表或工作簿代码容器中(Sheet1
或{例如,在VBA编辑器中为{1}}。
可以从代码容器中获取工作簿。如果代码在工作表代码容器中,请使用ThisWorkbook
。如果位于Me.Parent
中,请使用ThisWorkbook
。这些容器实际上是表示工作表/工作簿对象的类。因此Me
指向该对象。工作表的父级是其工作簿。
因此,将Me
对象设置为其容器工作簿。然后将打开的工作簿循环到Workbook
中,并测试该工作簿是否与代码容器工作簿相同,或者是否相同。如果是另一个,则退出循环。 For...Each
显示了结果(两个不同的名称),并演示了如何继续使用单独的工作簿对象。
Debug.Print
答案 1 :(得分:0)
我建议以下内容来找到Setting
工作表:
Option Explicit
Public Sub FindSettingWorksheet()
Dim MasterSheet As Worksheet
Dim wb As Workbook
For Each wb In Workbooks 'loop through all open workbooks
On Error Resume Next 'stop error reporting
Set MasterSheet = wb.Worksheets("Setting") 'if this throws an error it's the wrong workbook
On Error GoTo 0 're-enable error reporting
If Not MasterSheet Is Nothing Then Exit For 'if we found the setting worksheet we can exit/stop
Next wb
If Not MasterSheet Is Nothing Then 'test if we found it
Debug.Print MasterSheet.Name
Else
Debug.Print "Settings not found"
End If
End Sub