vba - 可以将 LongLong 存储在变体中吗?

标签 vba 32bit-64bit variant

根据this article中的表格,Variant 类型不支持 VARENUM.VT_I8 - 这映射到 VBA 的 VbVarType.vbLongLong。这对我来说意味着 Variant 不能容纳 LongLong - 然而 LongLong 的宽度仅与 Double 或货币一样宽 - 并且这些可以存储在 Variant 罚款中,所以我认为没有理由 LongLong 不能,并且我想知道那篇文章是否已经过时了。

无论如何,我没有 64 位 Excel,所以有人可以帮我检查一下 - 如果不支持,那么有什么想法吗?

最佳答案

基于this link that braX发布后,我的 64 位 Excel 能够运行以下代码。

Option Explicit

Public Sub ShowThatVariantsCanBeLongLong()
    Dim myLongLong As Variant

    myLongLong = 9.22337203685478E+18

    Sheet1.Cells(1, 1).Value = myLongLong
End Sub

这是我的 Excel 应用程序的性能证明。

enter image description here

编辑:

Greedo评论说 myLongLong 可能已转换为 double 型,因此我将 ^ 规范添加到分配给 myLongLong 的数字中。

这是我最初发布的代码的输出,其中包含 myLongLong 的类型名称。

enter image description here

因此看起来 Variant 将默认为 double 类型,但这并不一定能回答问题。

这是我使用的修改后的代码:

Option Explicit

Public Sub ShowThatVariantsCanBeLongLong()
    Dim myLongLong As Variant

    myLongLong = 9223372036854775807^

    Sheet1.Cells(1, 1).Value = myLongLong
    Sheet1.Cells(1, 2).Value = TypeName(myLongLong)
End Sub

下面是输出以及屏幕截图中的代码:

enter image description here

看起来Variant确实支持LongLong

关于vba - 可以将 LongLong 存储在变体中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60020919/

相关文章:

sql-server - 在Excel中的VBA中捕获来自SQL Server的错误消息

delphi - 从 Variant String 转换为 Double 忽略小数点

C++ 抽象变体实现

c++ - 自动定义来自 CRTP 的访客(CRTP 使用 boost foreach with boost variant)

vba - 在 Excel VBA 编辑器中生成子程序/函数一般注释

excel - `Application.StatusBar` 是否在 Office 2011 中工作?

excel - WorksheetFunction.CountIfs 给我一个类型不匹配错误(错误 #13)

mysql - 安装 MySQLdb Python 架构错误

Eclipse RCP 应用程序 (Indigo) 上的 Java 退出代码 13

windows - 如果进程正在 Windows 2008 R2 64 位上运行,如何使用 Inno Setup 检查?