【发布时间】:2021-07-26 11:18:07
【问题描述】:
我有一个模块(“Module1.bas”),其中使用条件编译常量作为编程测试来确定 VBA 版本号(例如 VBA7)以及它是否在 64 位平台上运行。根据该测试的结果,私有类型“BROWSEINFO”被声明为 Windows API 函数 SHBrowseforFolder,它在 32 位和 64 位类型之间变化。在 32 位版本中它返回一个 Long,而在 64 位版本中它返回一个 LongPtr。
效果很好。
但是,在同一个模块中,有一个函数“GetDirectory”,它使用上述声明中的数据类型和 SHBrowseforFolder 函数....除此函数外,返回类型在 GetDirectory 的开头声明功能为 Long ,因此被“硬编码”。似乎没有任何方法可以使这些数据类型以 VBA 版本和操作系统类型为条件。
我错过了什么吗?
我真的希望能够根据运行 VBA 的 Excel 版本来运行 VBA,而不是拥有 2 个不同的版本。
【问题讨论】:
-
您能否复制您的函数,一个用于 32 位,一个用于 64 位,并使用
If...Then语句来建立If 32bit Excel Then Do the 32bit function... 等? -
请向我们展示能够重现问题的代码。
-
感谢您的回复,但是,我能够解决问题。由于 LongPtr 类型的变量在 32 位版本的 Office 中解析为 Long,而在 64 位版本的 Office 中解析为 LongLong,我只是在 GetDirectory 函数中将这两个变量声明为 LongPtr 类型。错误就会消失(假设 Windows API 声明是 32/64 位特定的,使用条件编译常量)。