如何通过在另一个工作簿中的VBA对象名称引用Excel工作表?
我有两个Excel工作簿:
Source.xlsx
-
Tool.xlsm
Source.xlsx
包含一个包含VBA对象名称shtTests
:
我们假设在Tool.xlsm
有一个variables,它包含对Source.xlsx
存储的工作簿的引用:
Dim wkbSource as Workbook Set wkbSource = GetSourceWorkbook() ' Some function that gives a reference to the workbook
核心问题:如何通过使用shtTests
的VBA名称来引用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项目对象模型”