首页 > 解决方案 > Excel VBA - 通过代码名称间接引用工作表

问题描述

有没有办法通过它的 CodeName 间接引用一张工作表,而无需遍历每张工作表来测试它的 CodeName?例如,

方法 1:以下代码不起作用(如果确实如此,那将是理想的):

Dim ws As Worksheet

Set ws = "mySheet" & myVar

方法 2:但这有效(如果您在其中硬编码 CodeName):

Dim ws As Worksheet

Set ws = mySheetExample

方法3:这有效(对于动态方法):

Dim ws As Worksheet

For Each sh In ThisWorkbook.Worksheets
    If sh.CodeName = "mySheet" & myVar Then
        'do something
    End If
Next

这是一种非常冗长的做事方式,这让我想到了我的问题,为什么第一种方法不起作用?

标签: excelvba

解决方案


它不会那样工作,因为您试图将字符串分配给工作表对象。Select Case是要走的路。或者

尝试这个

Set ws = Sheets(ThisWorkbook.VBProject.VBComponents("mySheet" & myVar).Properties("Name").Value)

一个更详细的例子

Option Explicit

Sub Sample()
    Dim ws As Worksheet
    Dim myVar As Long
    Dim shName As String

    myVar = 1

    shName = "Sheet" & myVar
    Set ws = Sheets(ThisWorkbook.VBProject.VBComponents(shName).Properties("Name").Value)

    Debug.Print ws.CodeName
End Sub

为此,请启用“信任对 VBA 项目的访问”

  1. 启动 Microsoft Excel。
  2. 打开一个工作簿。
  3. 单击文件,然后单击选项。
  4. 在导航窗格中,选择信任中心。
  5. 单击信任中心设置...。
  6. 在导航窗格中,选择宏设置。
  7. 确保选中对 VBA 项目对象模型的信任访问。
  8. 单击确定。

如果您不知道对 VBA 项目对象模型的信任访问是什么,那么您可以在启用或禁用 Office 文件中的宏中了解它


推荐阅读