【问题标题】:How can I get a worksheet object from a specific workbook (not 'ThisWorkbook') using the worksheets CodeName?如何使用工作表 CodeName 从特定工作簿(不是“ThisWorkbook”)中获取工作表对象?
【发布时间】:2019-11-07 18:56:55
【问题描述】:

我想从特定工作簿中获取工作表对象,如下所示:

 Set ws = Application.Workbooks("WorkBookName.xlsm").Worksheets("sheet1")

但是,我想使用工作表的 CodeName,因为工作表的名称可以更改。例如:

 Set ws = Application.Workbooks("WorkBookName.xlsm").Sheet1

现在,我知道这不起作用,因为 Sheet1 是 VBA 编辑器为方便而创建的全局变量。

我也知道我可以使用索引(即 Worksheets(1))来获取工作表对象,但是如果有人移动工作簿中的工作表,函数将无法正常工作。

所以我的问题是:如何从特定工作簿(不是“ThisWorkbook”)中获取工作表对象并使用 CodeName 将其存储在变量中?

这是一个示例 sn-p(我对在 stackoverflow.com 上发帖很陌生):


Public Sub Main()

    ' Test Class
    Dim test As New StoreContestModel
    test.StoreID = "28"
    test.StoreName = "Kippersville"

    ' Other workbook
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim r As Range
    Dim v As String

    ' Showing test StoreID in other workbook. Code is broken up because as one-line it did not work.
    Set wb = Application.Workbooks("Contest.xlsm")
    Set ws = Application.Workbooks("Contest.xlsm").Sheet1 ' wb.Sheet1 didn't work
    Set r = ws.Range("N2")
    r.value = test.StoreID

End Sub

我希望 StoreID 显示在另一个工作簿中指定的单元格中。但是,我收到此错误:

运行时错误“438”:

对象不支持该属性或方法

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    你可以这样做:

    Sub Tester()
    
        Dim ws As Worksheet
    
        Set ws = SheetFromCodeName(ActiveWorkbook, "Sheet1")
    
        Debug.Print ws.Name
    
    End Sub
    
    Function SheetFromCodeName(wb As Workbook, cn As String)
        Dim s, rv As Worksheet
        For Each s In wb.Worksheets
            If s.CodeName = cn Then
                Set rv = s
                Exit For
            End If
        Next s
        Set SheetFromCodeName = rv
    End Function
    

    【讨论】:

    • 感谢蒂姆,您的快速回复。我还考虑过创建一个 foreach 循环来找到我想要的工作表 CodeName 的匹配项,但我真的希望有一个内置的方法来为我做这件事。
    • 好吧,我也认为可能有什么问题,但即使是 CallByName,我通常的首选,也不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 2013-08-17
    • 1970-01-01
    相关资源
    最近更新 更多