Variables 使长变量在64位和32位Excel VBA中工作
我有一个相当复杂的ExcelVBA项目,在32位系统上运行良好,我现在也在尝试使它在64位系统上运行。我已经解决了所有函数声明,但是仍然遇到了一些关于Variables 使长变量在64位和32位Excel VBA中工作,variables,excel,vba,Variables,Excel,Vba,我有一个相当复杂的ExcelVBA项目,在32位系统上运行良好,我现在也在尝试使它在64位系统上运行。我已经解决了所有函数声明,但是仍然遇到了一些关于Long数据类型的问题 在做一些研究后,我(从MSDN页面)得出了以下结论: LongPtr解析为的实际数据类型取决于其运行的Office版本:LongPtr在32位版本的Office中解析为Long,在64位版本的Office中解析为LongPtr 但这是否意味着我可以从 Dim x as Long 到 我应该在任何地方都这样做吗?还是我把棍子
Long
数据类型的问题
在做一些研究后,我(从MSDN页面)得出了以下结论:
LongPtr解析为的实际数据类型取决于其运行的Office版本:LongPtr在32位版本的Office中解析为Long,在64位版本的Office中解析为LongPtr
但这是否意味着我可以从
Dim x as Long
到
我应该在任何地方都这样做吗?还是我把棍子的一端搞错了?在某些情况下,这是行不通的还是应该避免这种改变?试试LongLong。从规范上看,LongLong似乎是32位Long类型的替代品 我同意@Ken White的回答。
备注(部分答案):
- 您不会要求将32位项目转换为64位项目(在32位上不起作用)
- 您始终需要声明变量类型(如果您是一名优秀的程序员)
但有时,您没有选择,因为某些对象的属性在32位和64位中不是相同的数据类型。 例如,如果使用ADO:
Dim rstTest As ADODB.Recordset
在32位Office上很长rstTest.RecordCount
在64位Office上是LongLongrstTest.RecordCount
Dim lngCount As LongPtr
lngCount = rstTest.RecordCount
您需要声明类型吗?如果您只是将变量保留为变量(不声明类型),代码可能会稍微慢一点,但VBA应该在您的背后完成繁重的工作。换言之,为什么不将其保留为
long
?当一个变量的长度显然只需要32位时,为什么要创建一个64位的变量呢。我想知道你是否在解决一个不存在的问题。也许你可以更清楚地解释(用一个小代码示例)为什么你认为你需要的不是Long
。只是我同意@LưuVĩnhPhúc-你想得太多了。嗯,不。这并不意味着你把所有模糊的语句从Long
改为LongPtr
。这意味着在代码中已经使用LongPtr
的地方,该变量的大小可以在32位和64位版本之间更改。您只需按原样使用Long
。但是,不可能帮助您找到问题的解决方案,因为您没有解释您遇到的问题-您说“长数据类型仍然存在一些问题”,但您显示的唯一“问题”是您误读了文档的含义。你对Long有什么问题?有这些问题的变量的含义是什么?他们持有什么?e、 如果您使用Long来保存“行号”,那么在现实场景中您不需要更改它。如果他们持有从外部API接收的“句柄”并将其传递给外部API,则考虑LongPtr(“long指针”),如果您只需要32位值,则不需要龙龙。你能详细说明一下“你总是需要声明变量类型”吗?经过两年的VBA编程,我得出结论,我将对95%的变量使用隐式类型。python也是类型不可知的。。。我同意您必须在“正确编程”中声明类型,但VBA实际上是脚本,而不是编程。只有当您是一名优秀的程序员时,您才需要它:o)这只是一个最佳实践。您可能不声明变量类型,但在这种情况下,代码更容易出错/出现bug。
Dim lngCount As LongPtr
lngCount = rstTest.RecordCount