VBA中数组赋值带/不带括号为什么结果一致且不触发同名Sub?
问题底层原因解答
同名标识符优先级的规则限制
VBA在解析标识符时默认遵循局部作用域优先的匹配逻辑:你在getArray函数内部已经通过Dim returnArray(1) As Integer声明了一个局部数组变量,该变量的优先级远高于模块层面声明的同名returnArray子过程。因此代码中所有returnArray、returnArray()的写法,都会被VBA识别为局部数组变量,根本不会调用外部的Sub过程,Sub内的MsgBox自然不会触发。空括号不影响结果的原因
对于已经声明完成的固定大小数组,VBA语法支持两种完整数组引用方式:直接写数组名、或者数组名后加空括号。此处的空括号不属于过程调用的语法标识,只是数组类型的标记,所以两种写法都是将局部数组的全部内容赋值给函数返回值,得到的结果完全一致。
补充验证:如果需要强制调用外部同名Sub,可添加模块名前缀明确指定调用对象,例如
Call Module1.returnArray(),执行时即可触发Sub内的MsgBox。
内容的提问来源于stack exchange,提问作者ldbruin
相关产品推荐
相关产品推荐

