@FlorentB .: Спасибо, на самом деле я этого не знал! Я добавил его в свой ответ (включая пример репо).

у проверить типVariant, Это можно сделать сTypeName а такжеVarType, Я думаю, что с помощьюVarType более эффективен, так как не требует сравнения строк, только числовое сравнение. Любая причина для предпочтенияTypeName?

Public Sub testType()
    Dim b() As Double
    Dim a As Variant
    a = b

    Debug.Print TypeName(a) = "Double()" 'True
    Debug.Print VarType(a) = vbArray + vbDouble 'True
End Sub

Ответы на вопрос(1)

Решение Вопроса

Моя рекомендация

использованиеVarType для встроенных типов, охватываемыхVbVarType перечисление. использованиеTypeName для других типов. Я объясню эту рекомендацию подробно ниже.

Представление

Разница в производительности, скорее всего, незначительна, особенно если вы используете VBA для написания приложений баз данных.

VarType

Большое преимуществоVarType является то, что он не использует магические строки: если вы ошиблисьvbDouble, вы получаете ошибку времени компиляции (при условии, что вы используетеOption Explicit, который вы должны). Если вы ошиблись"Double()", ваш код будет просто молча делать неправильные вещи.

TypeName

ПреимуществоTypeName является то, что он также работает для типов, которые не охватываютсяVbVarType перечисление:

Dim b As New Collection
Dim a As Variant
Set a = b

Debug.Print VarType(a)      ' Prints just the generic vbObject constant
Debug.Print TypeName(a)     ' Prints "Collection"

Gotchas

Обратите внимание, что если переменная содержит объект ссвойство по умолчанию, VarType возвращает тип значения, содержащегося в свойстве по умолчанию вместоvbObject, Вот пример использования класса TempVar MS Access VBA:

TempVars("x") = 123

Dim a As Variant
Set a = TempVars("x")

Debug.Print VarType(a)  ' Prints vbInteger, the type of a.Value's current content.
                        ' (Value is TempVar's default property)

Debug.Print TypeName(a) ' Prints "TempVar"
 Heinzi05 окт. 2017 г., 10:56
@FlorentB .: Спасибо, на самом деле я этого не знал! Я добавил его в свой ответ (включая пример репо).
 Florent B.05 окт. 2017 г., 10:29
Вы упускаете тот факт, чтоVarType(object) возвращает тип свойства объекта по умолчанию, если какое-либо времяTypeName(object) возвращает имя объекта.

Ваш ответ на вопрос