求助:宏中MsgBox自动转为小写导致代码执行报错如何解决
问题解析与解决办法
嘿,这个问题其实是典型的命名冲突导致的,我来帮你理清楚:
你把自己的宏命名成了msgbox,但MsgBox本身是VBA的内置函数——而且VBA是不区分大小写的,所以当你在宏里写msgbox "hello"时,VBA会优先把它识别成你自己定义的这个Sub,而不是系统内置的弹窗函数,这就造成了递归调用(你的宏反复调用自己),自然会报错。至于输入MsgBox后自动变成小写的msgbox,也是因为VBA检测到你已经定义了同名的过程,所以自动统一成你定义的大小写形式。
解决起来很简单,给你两个方案:
优先推荐方案:换个不重名的宏名
把你的自定义宏改成一个和内置函数不冲突的名字,比如ShowGreetingMsg,这样就不会有任何混淆了:Sub ShowGreetingMsg() MsgBox "hello" End Sub备选方案:显式调用内置函数
如果实在不想改宏名(不推荐,容易搞混),可以在调用内置函数时加上VBA库的前缀,明确告诉VBA你要调用的是系统自带的MsgBox:Sub msgbox() VBA.MsgBox "hello" End Sub
以后写VBA代码的时候,尽量避开用内置函数、关键字或者对象的名字来命名自己的过程、变量,能省掉不少这类麻烦~
内容的提问来源于stack exchange,提问作者Abhay Tomar
相关产品推荐
相关产品推荐

