Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables 使长变量在64位和32位Excel VBA中工作_Variables_Excel_Vba - Fatal编程技术网

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

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 到 我应该在任何地方都这样做吗?还是我把棍子

我有一个相当复杂的ExcelVBA项目,在32位系统上运行良好,我现在也在尝试使它在64位系统上运行。我已经解决了所有函数声明,但是仍然遇到了一些关于
Long
数据类型的问题

在做一些研究后,我(从MSDN页面)得出了以下结论:

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

但这是否意味着我可以从

Dim x as Long


我应该在任何地方都这样做吗?还是我把棍子的一端搞错了?在某些情况下,这是行不通的还是应该避免这种改变?

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

我同意@Ken White的回答。
备注(部分答案):

  • 您不会要求将32位项目转换为64位项目(在32位上不起作用)
  • 您始终需要声明变量类型(如果您是一名优秀的程序员)
您仍然可以在Office 64位中使用长数据类型。它将兼容在32位和64位Office中运行。
但有时,您没有选择,因为某些对象的属性在32位和64位中不是相同的数据类型。 例如,如果使用ADO:

Dim rstTest As ADODB.Recordset 
  • rstTest.RecordCount
    在32位Office上很长
  • rstTest.RecordCount
    在64位Office上是LongLong
如果要将rstTest.RecordCount存储到lngCount变量中,则必须使用LongPtr声明此变量,否则无法在32位和64位上使用:

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