VBA中Long和Object数据类型的区别



在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函数意外行为的任何风险。

最新更新