Можете ли вы хранить LongLong в варианте? - PullRequest
2 голосов
/ 01 февраля 2020

Согласно таблице в этой статье , тип Variant не поддерживает VARENUM.VT_I8 - это сопоставляется с VBA VbVarType.vbLongLong. Это наводит меня на мысль, что Variant не может содержать LongLong - однако LongLong имеет ширину только Double или Currency - и их можно хранить в штрафе Variant, поэтому я не вижу причин, по которым LongLong не может быть, и Интересно, устарела ли эта статья?

Во всяком случае, у меня нет 64-разрядной версии Excel, так что, может, кто-нибудь проверит меня - и если не поддерживаются, тогда какие-нибудь мысли почему?

1 Ответ

2 голосов
/ 02 февраля 2020

Исходя из этой ссылки, опубликованной 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 мог быть брошен к двойному, поэтому я добавил спецификацию ^ к номеру, который я назначил для 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.

...