正在进行安全检测...
发布时间:2023-12-02 18:34:11
64位VisualBasicforApplications概述
MicrosoftVisualBasicforApplications(VBA是MicrosoftOffice附带的VisualBasic版本。在MicrosoftOffice2010中,VBA包括可使VBA代码同时在32位和64位环境中正确运行的语言功能。注意:默认情况下,Office2010安装32位版本。在安装过程中,您必须明确选择安装64位版本。对于在Office2010版本之前(VBA版本6和更早版本)编写的VBA代码,需要修改为在64位Office版本中运行,否则在64位平台上运行时会导致错误。这是因为,VBA版本6和更早版本完全以32位平台为目标,而且通常包含Declare语句,这些语句调用的WindowsAPI使用32位数据类型的指针和句柄。因为VBA版本6和更早版本没有用于指针或句柄的特定数据类型,所以,它使用Long数据类型(一种32位4字节的数据类型)来引用指针和句柄。64位环境中的指针和句柄为8字节64位数。这些64位数不能包含在32位数据类型中。注意:只有在64位版本的MicrosoftOffice中运行VBA代码时,才需要修改VBA代码。
在64位Office中运行旧VBA代码的问题在于,将64位加载到32位数据类型中会截断64位数。这会导致内存溢出、代码中出现意外结果,并且可能导致应用程序故障。
为解决此问题,以使VBA代码能同时在32位和64位环境中正确运行,新版VBA中增加了几项语言功能。此文档底部的表总结了这些新的VBA语言功能。有三个重要的新增功能,分别是:LongPtr类型别名、LongLong数据类型和PtrSafe关键字。
LongPtr-现在,VBA包括一种可变类型别名:LongPtr。LongPtr
实际解析为哪种数据类型取决于它在哪种Office版本中运行:在32位版本的Office中LongPtr解析为Long,在64位版本的Office中LongPtr解析为LongLong。LongPtr用于指针和句柄。LongLong-LongLong数据类型为有符号的64位整数,仅在64位版本的Office中可用。LongLong
用于64位整数。必须使用转换函数将LongLong(包括64位平台上的LongPtr)显式赋予较小的整型。不允许将LongLong隐式转换为较小的整数。PtrSafe-PtrSafe关键字声明Declare语句可以在64位版本的Office中安全运行。现在,在64位版本的Office中运行时,所有Declare语句必须都包括PtrSafe关键字。必须理解,仅仅将PtrSafe关键字添加到Declare语句中只是表示