2

在 VBA 中,Long 和 Object 数据类型都是 4 字节,即内存地址的大小。这是否意味着,从技术上讲,Object 数据类型不会做 Long 不能做的任何事情?如果是,那么是否可以说 Object 数据类型的存在只是为了让程序员更容易区分变量的用途?

这个问题出现在我考虑 Win32 API 函数声明时。它们经常被声明为 Long,除非我弄错了,否则它们的返回值只是一个内存地址。那么,似乎将这些函数定义为 Object 会更合适。

我完全没戏了吗?提前致谢。

4

1 回答 1

1

基于 VBA/MSDN 帮助:

长(长整数)变量存储为带符号的 32 位(4 字节)数字,值范围从 -2,147,483,648 到 2,147,483,647。

和另一个定义:

对象变量存储为引用对象的 32 位(4 字节)地址。使用 Set 语句,声明为 Object 的变量可以分配给它的任何对象引用。

从实际的角度来看,它们都是不同的,并且在不同的情况下使用。哪些是必不可少的:Long >> 指的是数字Object >> 指的是 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 函数的意外行为造成任何风险。

于 2013-05-31T05:08:07.797 回答