使长变量在64位和32位Excel VBA中工作

M. *_*. H 8 variables excel vba excel-vba

我有一个非常复杂的Excel VBA项目,它在32位系统上运行良好,我现在正试图让它适用于64位系统.我已经解决了所有函数声明,但仍然遇到了Long数据类型的一些问题.

做一些研究,我想出了这个(来自MSDN页面):

LongPtr解析为的实际数据类型取决于其运行的Office版本:LongPtr在32位版本的Office中解析为Long,LongPtr在64位版本的Office中解析为LongLong.

但这是否意味着我可以改变我的所有Dim陈述

Dim x as Long
Run Code Online (Sandbox Code Playgroud)

Dim x as LongPtr
Run Code Online (Sandbox Code Playgroud)

我到处应该这样做吗?或者我得到了错误的结束?是否存在不起作用的情况或应避免这种变化?

Sly*_*Sly 5

我同意@Ken White 的回答。
备注(对于一些答案):

  • 您不会要求将 32 位项目转换为 64 位项目(这不适用于 32 位项目)。
  • 你总是需要声明变量类型(如果你是一个优秀的程序员)

您仍然可以在 Office 64 位中使用 Long 数据类型。它将兼容在 32 位和 64 位 Office 中运行。
但有时,您没有选择,因为某些对象的属性在 32 位与 64 位中的数据类型不同。例如,如果您使用 ADO:

Dim rstTest As ADODB.Recordset 
Run Code Online (Sandbox Code Playgroud)
  • rstTest.RecordCount 在 32 位 Office 上很长
  • rstTest.RecordCount 是 64 位 Office 上的 LongLong

如果要将 rstTest.RecordCount 存储到 lngCount 变量中,则必须使用 LongPtr 声明此变量,否则它将不适用于 32 位和 64 位:

Dim lngCount As LongPtr  
lngCount = rstTest.RecordCount
Run Code Online (Sandbox Code Playgroud)

  • 你总是需要它,只有当你是一个优秀的程序员时:o)这只是一个最佳实践。你可以不声明变量类型,但在这种情况下,代码将更容易出现错误/错误。 (2认同)

Mat*_*ann -3

试试龙龙。从规范来看,LongLong 似乎是 32 位类型 Long 的替代品。

  • 不,如果您只需要 32 位值,则不需要 LongLong。它是[仅在 64 位平台上有效的声明类型](http://msdn.microsoft.com/en-us/library/office/gg278463%28v=office.15%29.aspx) (5认同)