【问题标题】:Longptr datatype for VB6 and VB7VB6 和 VB7 的 Longptr 数据类型
【发布时间】:2018-11-16 12:31:00
【问题描述】:

我面临的问题是,我想分发我的 Excel VBA 模板之一。几乎在所有过程中,我都分配了 LONG 数据类型。但是,我发现对于 VBA7 或 2010 及更高版本,我们可以使用 LongPtr 数据类型进行分配。这将绕过版本控制问题。无论是 64 位还是 32 位的 MS office。

但我的一位朋友指出我不能将 LongPtr 用于 VB6 或 2010 年以下的 office。

所以我尝试使用这种方式使其更适用于任何办公版本

#If VBA7 Then
    Dim X As LongPtr
#Else
    Dim X As Long
#End If

我应该使用上述声明吗?它会导致错误吗?据我的朋友说,它会导致。他还补充说编译器会绕过 if 语句。

我没有测试它的系统。

我目前的系统是,

Windows 10 64 位

MS Office 2016 32 位

请建议我,我错过了这个概念。为什么我不能在程序中使用上述声明?

谢谢。

【问题讨论】:

    标签: excel vba


    【解决方案1】:
    #If VBA7 Then
        Dim X As LongPtr
    #Else
        Dim X As Long
    #End If
    

    我应该使用上述声明吗?会不会出错?

    是的,你应该使用上面的声明,它不会导致错误,即使在旧版本的 Office 中。

    但是,您应该了解何时以及为什么需要使用LongPtr 而不是Long
    Long 存在于所有版本中,并且在所有版本中都表示相同的含义(32 位整数)。您不应该为了它而将其更改为LongPtr。您应该只将 LongPtr 用于指针或指针大小的数据类型。

    【讨论】:

    • 你确定的朋友,我可以使用声明吗?因为我还没有测试过,但是我的朋友自信地说它会抛出一个错误。是的,谢谢您的快速回复。
    • @KamalBharakhda 是的,我相信您可以使用此声明。这正是conditional compilation 存在的原因。
    • @Storax,朋友,你没有正确理解我的问题。我已经用谷歌搜索了这个查询并浏览了同一页面,但他们说,我们只能在 2010 年或之后使用 LongPtr。现在,如果我想将我的工作簿分发给客户,并且如果他们的系统不支持 LongPtr 数据类型的早期版本,那该怎么办?所以,为了使我的应用程序更便携,我在这里放置了我的查询,以便我可以找到我是否朝着正确的方向前进?如果您对我的问题投反对票,请投赞成票。谢谢。
    • 我理解了这个问题,但你仍然没有谷歌。我提到的页面是访问例如以下页面msdn.microsoft.com/en-us/vba/language-reference-vba/articles/… 的起点。等等等等……
    猜你喜欢
    • 1970-01-01
    • 2018-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    • 2021-05-04
    • 1970-01-01
    相关资源
    最近更新 更多