excel - 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
这是一种非常冗长的做事方式,这让我想到了我的问题,为什么第一种方法不起作用?
解决方案
它不会那样工作,因为您试图将字符串分配给工作表对象。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 项目的访问”
- 启动 Microsoft Excel。
- 打开一个工作簿。
- 单击文件,然后单击选项。
- 在导航窗格中,选择信任中心。
- 单击信任中心设置...。
- 在导航窗格中,选择宏设置。
- 确保选中对 VBA 项目对象模型的信任访问。
- 单击确定。
如果您不知道对 VBA 项目对象模型的信任访问是什么,那么您可以在启用或禁用 Office 文件中的宏中了解它
推荐阅读
- reactjs - 一旦我给出一个值,Next.js 表单组件就不允许被编辑
- python - Python套接字服务器,限制接收的数据
- flutter - 如何使用 redux 将状态传递给 Flutter 中的 BottomNavigationBar 页面?
- sql - 如何使用 ODBC 包从 SQL Server 将大表(>100 列(变量)和 100,000 个观察值)读入 R
- c# - 与 C# 项目、Azure 和 Office SharePoint 365 相关的架构/设计问题
- vhdl - Vhdl 并行或串行输入/并行输出寄存器
- erlang - 在 init_per_suite 中创建的命名 gen_server 进程在测试中不存在
- css - 在 Flexbox 中保持固定宽度元素的均匀间距
- r - 管道工 R 渲染 svg 文件
- azure-log-analytics - 了解 azure heartbeat 查询