Vba 兼容32位excel和64位excel(office 365)
我在vba没有经验,所以感谢您的理解 我在office 365中测试了一些旧宏,之前我使用excel 2016 我了解到,由于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函数(
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如果您能阅读我的帖子,将非常感谢您的反馈:-)