如何用XL4宏调用定义应用程序级Defined Names以保留VBA状态?
用XL4宏创建应用程序级Defined Names的方法
嘿,这个冷门的XL4宏技巧我刚好折腾过!确实能创建应用程序级的Defined Names——这类名称不会因为VBA项目重置(比如编译炸了、手动重置VBA工程)而丢失,用来存状态简直绝了。下面一步步教你怎么弄:
1. 先插入XL4宏表
XL4宏是Excel的旧版宏系统,和VBA不是一回事,得先插个专门的宏表:
- 打开Excel,直接按
Ctrl + F11,就能插入一个默认名为Macro1的宏表(就是那种看起来像普通工作表,但专门用来写XL4宏的表) - 要是你找不到快捷键,也可以通过Excel界面操作:点击「开发工具」→「录制宏」,然后选择“保存在:个人宏工作簿”,录制完再删掉无用的宏,保留宏表就行
2. 编写XL4宏代码创建应用程序级名称
在宏表的任意空白单元格(比如A1)里输入这段代码:
=DEFINE.NAME("AppLevel_State", "Sheet1!$A$1", , TRUE)
给你拆解下参数的作用:
- 第一个参数
"AppLevel_State":是你要创建的应用程序级名称的名字,自己取个好记的,建议加前缀避免和其他名称冲突 - 第二个参数
"Sheet1!$A$1":是这个名称对应的引用,可以是单元格,也可以直接写常量(比如"我是存储的状态值") - 第三个参数:可选,用来加注释,不用的话就留空
- 第四个参数
TRUE:这是核心!设为TRUE就表示这个名称是应用程序级的,省略或设为FALSE就是普通的工作簿级名称
输入完后,选中这个单元格,按F9就能执行这段宏,创建出应用程序级名称了。
3. 验证它的持久性
你可以测试下它是不是真的不会被VBA重置清除:
- 按
Alt + F11进入VBA编辑器,点击「运行」→「重置」,把当前VBA项目重置 - 回到Excel,按
Ctrl + F3打开名称管理器,你会看到AppLevel_State还在,而且它的「范围」显示的是应用程序(不是具体的工作簿) - 甚至关闭当前工作簿再重新打开,这个名称依然存在,除非你手动删除它
4. 修改或删除应用程序级名称
- 修改:重新运行
DEFINE.NAME宏,替换对应的参数就行,比如把引用改成"新的状态值" - 删除:在宏表单元格输入
=DELETE.NAME("AppLevel_State", TRUE),然后按F9执行,这里的TRUE同样是指定要删除应用程序级的名称
一些注意事项
- XL4宏是老技术,但目前2024年所有主流Excel版本都还支持,不过未来会不会被移除不好说,用来存临时状态没问题
- 应用程序级名称是所有打开的工作簿共享的,所以命名一定要独特,别和其他工作簿的名称撞了
- 要是你要存复杂状态,建议把值存在一个隐藏的工作表单元格里,再让应用程序级名称引用这个单元格,这样修改和读取都更灵活
内容的提问来源于stack exchange,提问作者Tuntable
相关产品推荐
相关产品推荐

