VBA中能否引用当前执行代码所属工作表且无需硬编码表名?
解决方案
直接在DoSomething方法里用Me关键字就可以实现你的需求。
原理说明
- VBA中写在工作表模块内的代码,
Me关键字默认指向该模块所属的工作表对象,和当前处于激活状态的工作表没有关联,完全不受ActiveSheet的指向影响。 - 就算后续你修改了工作表的显示名称(即Excel底部标签上的名称),只要工作表的代码模块没有变动,
Me的指向永远是当前代码所属的工作表,不会出现引用失效的问题。
示例代码
你可以直接在Sheet2的模块中按如下格式写DoSomething方法:
Sub DoSomething() ' Me就代表当前代码所属的Sheet2对象,不需要显式指定Sheet2名称 Me.Range("A1").Value = "测试写入内容" ' 全程不需要调用ActiveSheet,也不需要硬编码工作表名称 End Sub
额外补充
如果需要进一步规避风险,你可以优先用工作表的CodeName引用对象,CodeName仅能在VBA编辑器中修改,普通用户修改工作表标签名不会对CodeName的指向产生影响,进一步降低代码失效概率。
内容的提问来源于stack exchange,提问作者NibblyPig
相关产品推荐
相关产品推荐

