【发布时间】:2014-07-28 12:44:18
【问题描述】:
我有一个相当复杂的 Excel VBA 项目,它在 32 位系统上运行良好,我现在正试图让它也适用于 64 位系统。我已经解决了所有的函数声明,但仍然遇到Long 数据类型的一些问题。
做了一些研究,我想出了这个(来自 MSDN 页面):
LongPtr 解析为的实际数据类型取决于它所运行的 Office 版本:LongPtr 在 32 中解析为 Long -bit 版本的 Office,LongPtr 在 64 位版本的 Office 中解析为 LongLong。
但这是否意味着我可以将我的所有Dim 语句从
Dim x as Long
到
Dim x as LongPtr
我应该到处这样做吗?还是我弄错了?在某些情况下这不起作用或应该避免这种变化?
【问题讨论】:
-
您需要声明类型吗?如果您只是将变量保留为 Variant(不声明类型),您的代码可能会稍微慢一些,但 VBA 应该在您背后做艰苦的工作。换一种说法——你为什么不把它保留为
long?你为什么要创建一个 64 位的变量,而它显然只需要 32 位长。我想知道你是否正在解决一个不存在的问题。也许你可以更清楚地解释(用一个小代码示例)为什么你认为你需要Long以外的东西。 -
你不需要这样做。只需
Use LongPtr for pointers and handles -
我同意@LưuVĩnhPhúc - 你想多了。
-
嗯,没有。这并不意味着您将所有 DIM 语句从
Long更改为LongPtr。这意味着您已经在代码中使用了LongPtr,该变量 的大小可以在 32 位和 64 位版本之间变化。您应该照原样使用Long。但是,无法帮助您找到问题的解决方案,因为您未能解释您遇到的问题 - 您说您“仍然遇到一些 Long 数据类型的问题。”,但是您显示的唯一“问题”是您误读了文档的含义。您对 Long 有什么问题? -
有问题的变量是什么意思?他们持有什么?例如如果您使用 Long 来保存“行号”,那么您无需在实际场景中更改它。如果他们持有您从外部 API 接收的“句柄”并将其传递给外部 API,那么请考虑 LongPtr(“长指针”)