在VBA中,Long和Object数据类型都是4字节,这是内存地址的大小。这是否意味着,从技术上讲,Object数据类型不能做Long不能做的事情?如果是,那么是否可以说Object数据类型的存在只是为了让程序员更容易区分变量的用途?
当我考虑Win32 API函数声明时,这个问题出现了。它们经常被声明为Long,除非我搞错了,它们的返回值只是一个内存地址。那么,将这些函数定义为Object似乎更合适。
我完全错了吗?
基于VBA/MSDN的帮助:
长(长整型)变量存储为带符号32位(4字节)
从-2,147,483,648到2,147,483,647的数字。
和另一个定义:
对象变量存储为引用的32位(4字节)地址对象。使用Set语句,声明为Object的变量可以有任何对象引用赋给它。
从实践的角度来看,它们都是不同的,并且在不同的情况下使用。它们是必不可少的:Long>>表示数字, Object>>表示对象。
查看以下VBA代码(用于Excel),我在其中添加了允许和不允许的注释:
Sub test_variables()
Dim A As Object
Dim B As Long
'both below are not allowed, throwing exceptions
'A = 1000
'Set B = ActiveSheet
'both are appropriate
Set A = ActiveSheet
B = 1000
End Sub
最后,在API方面,最好保持原始声明,不要使用它来操作,以避免API函数意外行为的任何风险。