繁体   English   中英

访问另一个打开的工作簿中的工作表时下标超出范围

[英]Subscript Out Of Range when accessing Sheet in another opened Workbook

我想参考第一个打开的工作簿。 打开了 2 个工作簿:一个是调用要执行的宏,另一个是包含宏的工作簿。 不知何故,代码经常运行顺利。 但有时,在访问第一个打开的工作簿中的数据时会出现引用错误:下标超出范围。

在这一行,出现错误:

Set mastersheet = Workbooks(1).Sheets("Setting")

所以集合中应该有两个工作簿。 我在监督什么? 请记住,第一个打开的工作簿没有固定名称,因此打开的工作簿的名称会发生​​变化。 第二个工作簿,即包含要执行的宏的工作簿,不会更改其名称。

不幸的是,您没有提供更多代码或有关宏所在的代码“容器”类型的任何信息。以下解决方案假定宏位于工作表或工作簿代码容器(VBA 编辑器中的Sheet1ThisWorkbook ,例如)。

可以从代码容器中获取工作簿。 如果代码位于 Worksheet 代码容器中,则使用Me.Parent 如果它在ThisWorkbook使用Me 这些容器实际上是表示工作表/工作簿对象 所以Me指的是那个对象。 工作表的父级是它的工作簿。

因此, Workbook对象被设置为其容器工作簿。 然后打开的工作簿在For...Each中循环,并测试工作簿是否与代码容器工作簿相同,或者是否与代码容器工作簿相同。 如果是另一个,则退出循环。 Debug.Print显示结果(两个不同的名称)并演示如何继续使用单独的工作簿对象。

Sub GetOtherWorkbook()
    Dim wbWithMacro As Workbook
    Dim wbOther As Workbook, wb As Workbook

    Set wbWithMacro = Me.Parent 'Assumes macro is in a "Sheet" code container
    'Set wbWithMacro = Me   'Assumes macro is in "ThisWorkbook" code container
    For Each wb In Workbooks
        If Not wb Is Me Then
            Set wbOther = wb
            Exit For
        End If
    Next
    Debug.Print wbWithMacro.Name, wbOther.Name
End Sub

我建议通过以下方式找到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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM