在VBA中,Long和Object数据类型都是4字节,这是内存地址的大小。这是否意味着,从技术上讲,对象数据类型不执行Long无法执行的任何操作?如果是,那么可以安全地说Object数据类型的存在只是为了让程序员更容易区分变量的用途吗?
当我考虑Win32 API函数声明时,出现了这个问题。它们经常被声明为Long,除非我弄错了,否则它们的返回值只是一个内存地址。似乎将这些函数定义为Object会更合适。
我完全不喜欢?提前谢谢。
答案 0 :(得分:2)
基于VBA / MSDN帮助:
长(长整数)变量存储为带符号的32位(4字节) 数字的范围从-2,147,483,648到2,147,483,647。
和另一个定义:
对象变量存储为引用的32位(4字节)地址 对象。使用Set语句,声明为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函数意外行为的任何风险。