繁体   English   中英

如何通过另一个工作簿中的VBA对象名称引用Excel工作表?

[英]How to refer to a Excel Worksheet by its VBA Object Name in another Workbook?

我有两本Excel工作簿:

  1. Source.xlsx
  2. Tool.xlsm

Source.xlsx包含VBA对象名称为shtTests的工作表:

shtTests的VBA属性的屏幕截图

假设在Tool.xlsm我有一个变量,该变量包含对存储在Source.xlsx的工作簿的引用:

Dim wkbSource as Workbook
Set wkbSource = GetSourceWorkbook() ' Some function that gives a reference to the workbook

核心问题:如何通过使用shtTestsVBA名称Tool.xlsm引用shtTests


或将问题表达为代码...假设您具有以下代码片段:

Dim wkbSourceShtTests as Worksheet
Set wkbSourceShtTests = GetShtTestsFromWkbSources(wkbSources)

问题: GetShtTestsFromWkbSources必须是什么样?


注意:想像使用wkbSources.Worksheets("Test Cloning")那样通过Excel名称引用它,因为人们可能有一天会更改其Excel名称。

这是您要尝试的吗?

Sub Sample()
    Dim wbThis As Workbook, wbThat As Workbook
    Dim wsThat As Worksheet
    Dim wsCodeName As String

    Set wbThis = ThisWorkbook
    Set wbThat = Workbooks("Book4") '<~~ Change this to relevant workbook

    wsCodeName = "ShtSheets"

    Set wsThat = wbThat.Worksheets(CStr(wbThat.VBProject.VBComponents(wsCodeName).Properties(7)))

    Debug.Print wsThat.Name
End Sub

注意 :要使其正常工作,您需要启用对Visual Basic项目的访问

File菜单Excel上,单击“ Options|Trust Center|Trust Center Settings|Macro Settings ,选中“信任对VBA项目对象模型的访问”框

如果您想要一个功能而不是设置受信任的访问权限,那么这可能会起作用:

Sub example()
Dim wkbSource As Workbook
Set wkbSource = GetSourceWorkbook()

Dim wkbSourceShtTests As Worksheet
Set wkbSourceShtTests = GetShtTestsFromWkbSources(wkbSource, "shtTests")

End Sub

Function GetShtTestsFromWkbSources(wkbk As Workbook, codename As String) As Worksheet
For Each sht In wkbk.Sheets
    If sht.codename = codename Then Set GetShtTestsFromWkbSources = sht
Next
End Function

暂无
暂无

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

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