【发布时间】:2015-01-05 11:17:08
【问题描述】:
我在 VBA 中使用这个语句
Private Declare PtrSafe Function GetTimeZoneInformationAny Lib "kernel32" Alias _
"GetTimeZoneInformation" (buffer As Any) As Long
这适用于:
- Win 64 位,Excel 2010 64 位
- Win 64 位,Excel 1010 32 位
但是,我的客户报告了对单词 PtrSafe 的编译错误。他正在使用 Excel 2010。
我不知道为什么会这样。有什么想法吗?
【问题讨论】:
-
@chris 我不认为这是重复的,而且我认为 linked answer 在其“如果您使用 64 位那么”中是不正确的,因为
PtrSafe有效在 32 位和 64 位上。 -
PtrSafe在 Excel 2010 中工作。确保您的客户实际使用它(而不是 Excel 2003)。 -
他确实说过,但话又说回来,他可能错了。只是为了确认上述语句在 Excel 2007 中是否可以正常工作?还有其他需要考虑的变量吗?我只对 Excel 2007 及更高版本感兴趣
-
Office 2007 没有 64 位版本,但具有 VBA 6。Office 2010 是第一个包含 VBA 7 和 64 位版本的版本。如果您需要支持 Office 2007 或更低版本,您应该使用
#If VBA7和declare your API twice。 -
GSerg 感谢您澄清这一点。我现在将声明两次,并在测试后通知您。