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

我有两个Excel工作簿:

  1. Source.xlsx
  2. Tool.xlsm

Source.xlsx包含一个包含VBA对象名称shtTests

用于shtTests的VBA属性的屏幕截图

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

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

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


或者以代码的forms提出问题…假设你有这个代码片段:

 Dim wkbSourceShtTests as Worksheet Set wkbSourceShtTests = GetShtTestsFromWkbSources(wkbSources) 

问题: GetShtTestsFromWkbSources必须看起来像什么?


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

如果你想要一个function,而不是设置可信访问,那么这可能会工作:

 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 

这是你正在尝试?

 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项目对象模型”