Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 兼容32位excel和64位excel(office 365)_Vba_Compatibility_32bit 64bit_Long Long_Vba7 - Fatal编程技术网

Vba 兼容32位excel和64位excel(office 365)

Vba 兼容32位excel和64位excel(office 365),vba,compatibility,32bit-64bit,long-long,vba7,Vba,Compatibility,32bit 64bit,Long Long,Vba7,我在vba没有经验,所以感谢您的理解 我在office 365中测试了一些旧宏,之前我使用excel 2016 我了解到,由于Long变量声明,某些宏可能无法正常工作- 正如我正确理解的,Long有4位,LongLong有8位。还有类似的东西►LongPtr当VBA7中的VBA7和VBA7中的8位不同时,它有4位 我的问题如下:在excel365中,我怎么可能仍然使用正常的Long变量 Long数据类型没有死 我了解到,由于Long变量声明,某些宏可能无法正常工作 您可能指的是,使用API函数(

我在vba没有经验,所以感谢您的理解

我在office 365中测试了一些旧宏,之前我使用excel 2016

我了解到,由于
Long
变量声明,某些宏可能无法正常工作- 正如我正确理解的,
Long
有4位,
LongLong
有8位。还有类似的东西►
LongPtr
当VBA7中的VBA7和VBA7中的8位不同时,它有4位

我的问题如下:在excel365中,我怎么可能仍然使用正常的
Long
变量


Long
数据类型没有死

我了解到,由于
Long
变量声明,某些宏可能无法正常工作

您可能指的是,使用API函数(API-应用程序编程接口)必须 照顾好不同的环境。这些系统功能确实需要
LongPtr
指向→ 句柄或→ 内存位置(注意特殊的
PtrSafe
前缀!)

我的问题如下:在excel365中,我怎么可能仍然使用普通长变量

与引用的API函数相反,VBA过程不会强制“禁止”变量的
Long
数据类型, 就像你在没有
整数的情况下被迫做的一样少(尽管顺便说一句,VBA内部更喜欢
长的
整数)

关于
LongPtr
声明的进一步说明

Office 2010或更高版本中,窗口句柄声明为
LongPtr
正如以前版本中的
Long
,有必要区分不同的版本 例如,通过条件编译常量(
#如果是VBA7,则为
#如果是
,则为End)

#If VBA7 Then              ' Office 2010 or higher
    Private Declare PtrSafe Function FindWindow Lib "User32" Alias "FindWindowA" _
           (ByVal lpClassName As String, _
            ByVal lpWindowName As String) _
    As LongPtr  
#Else
    Private Declare Function FindWindow Lib "User32" _
        Alias "FindWindowA" _
       (ByVal lpClassName As String, _
        ByVal lpWindowName As String) As Long
#End If
请注意,一些API函数还需要使用条件
Win64
常量来标识实际安装的64位办公系统; 我已经提到,Office通常默认安装为32位

但是,
LongPtr
不是真正的数据类型,因为它转换为正确的数据类型 取决于实际的32/64位环境

请注意,64位系统可以作为32位office或64位office安装。
LongPtr
支持编写可在32位和64位环境中运行的可移植代码

提示:注意通过适当的数据类型声明分配的API变量。 如果通过条件编译常量区分不同版本,则必须 也可以在您自己的过程中引用变量

相关链接

进一步建议读数(thx@GSerg:-)

在以下帖子中引用@GSerg:

通过向函数声明中添加PtrSafe,您可以向编译器保证,您已经将LongPtr放在了所有需要的地方,而不是其他地方

“LongPtr是指针大小的整数。它必须用于与指针大小相同的对象。”

“Long存在于所有版本中,在所有版本中都表示相同的内容(32位整数)。您不应因此将其更改为LongPtr。您应仅对指针或指针大小的数据类型使用LongPtr。”


不回答我的问题可能会有帮助,但这很有趣。但这个问题仍然是一个有帮助的答案;如果您还有其他问题,请随时询问:-)可能和。感谢您提供的有用的简明链接参考资料(已升级);我想在下面的帖子中明确地引用他们@GSERG如果您能阅读我的帖子,将非常感谢您的反馈:-)