在VB6/VBA项目引用中,Array()、LBound()和UBound(。。?当我输入代码时,它们不会出现在"自动完成"列表(ctrl+空格)中,它们不会自动完成,并且必须在文本编辑器识别它们之前完全键入。只有当键入左括号时,ToolTipText才会弹出命令语法。此外,它们不会出现在对象资源管理器中的任何位置。
这里可能有一个我不知道的基本概念。这让我想知道,还有哪些命令/语句/关键字以同样的方式隐藏。。?某个地方有单子吗。。?我在谷歌上搜索了信息,但没有找到任何东西,可能是因为我不知道自己在寻找什么,并且使用了错误的搜索词。
我问这些问题是因为我有很多VB6内置函数的前缀的习惯,比如:VBA。Left()、VBA。Len、VBA。Instr()等等。但我不知道Array()、LBound()和UBound(。
我之所以使用前缀,是因为几年前我正在做一个大型项目,我试图在不同的参考库中使用相同名称的函数。我是一个新手,花了一段时间才弄清楚,这引起了巨大的问题,因为这些功能并没有按照我想象的方式工作。就在那时,我在弄清楚之后养成了前缀的习惯。这样做更容易,而且总是确保使用预期的功能。
它们没有显示为IntelliSense选项的原因(以及它们没有显示在对象浏览器中的原因)是,由于某些原因,它们没有在VBE7.dll typelib中声明,我无法理解。Array
函数在.dll中实现为rtcArray
。知道这一点的效用是可疑的,因为它唯一的参数是ParamArray
,这意味着如果你直接从VBE7.dll调用它,你需要创建一个数组,让它向你反馈相同的数组。。。这部分解释了为什么它不在typelib上——COM调用需要做同样的事情,封送处理基本上与函数返回的内容相同。
LBound
和UBound
甚至没有作为函数出现在导出表中,所以我猜测它们在内部处理起来更像是"关键字",而不是第一类函数。这使得有一些的意义,因为如果您有一个指向自动化结构的指针,那么检查SAFEARRAY的边界是非常简单的(您只需在其末尾索引到rgsabound
数组并从中读取cElements
和lLbound
。同样是猜测,但我认为这允许LBound
和UBound
在固定长度和可变长度数组中灵活工作。在固定的情况下,数组基本上被管理为具有索引器的内存块(更像VT_CARRAY
而不是VT_SAFEARRAY
)。我想,在内部处理这个问题比提供一流的功能更容易或更方便。
won't
可以在对象浏览器中找到Debug
,也可以在其方法Assert
和Print
中找到。
您找不到类似方法使用的语句,如Open
、Close
、Get
和Put
,这就是为什么在使用这些语句时无法获得任何Intellisense,并且必须记住语法。
您会发现Load
和Unload
是VBA.Global
的成员,但不清楚它们属于什么,它们的自变量是后绑定的Objects
。VBA文档指出Load
和Unload
是语句,即使对象浏览器将它们显示为方法。
请记住,您可以移动引用的顺序,这样会有所不同。尝试将VBA移动到引用列表的顶部或靠近顶部。我相信,如果其他东西也定义了BASIC关键字,从某种意义上说,它会窃取它。我曾经让Right消失,因为我不知道引用的顺序,所以不得不将Right的所有引用更改为VBA.Right。ubound、lbound或数组可能也是如此。