(Предупреждение: хотя на первый взгляд это может показаться таковым, это не вопрос для начинающих. Если вы знакомы с фразой "Допустить принуждение" или когда-либо изучали Спецификация VBA, пожалуйста, продолжайте читать.)
Допустим, у меня есть выражение типа Variant
, и я хочу присвоить его переменной. Звучит легко, правда?
Dim v As Variant
v = SomeMethod() ' SomeMethod has return type Variant
К сожалению, если SomeMethod
возвращает объект (т. е. вариант с типом VarType для vbObject), разрешить приведение срабатывает, и v
содержит «Простое значение данных» объекта. Другими словами, если SomeMethod возвращает ссылку на TextBox, v
будет содержать строку.
Очевидно, решение состоит в том, чтобы использовать Set
:
Dim v As Variant
Set v = SomeMethod()
К сожалению, это не работает, если SomeMethod
не возвращает объект, например строка, приводящая к ошибке Несоответствие типов.
Пока единственное решение, которое я нашел, это:
Dim v As Variant
If IsObject(SomeMethod()) Then
Set v = SomeMethod()
Else
v = SomeMethod()
End If
который имеет неприятный побочный эффект двойного вызова SomeMethod
.
Есть ли решение, которое не требует двойного вызова SomeMethod
?
SomeMethod
наsub SomeMethod(var as variant): set var = xxx ...
и назначить стиль v по ссылке с помощьюSomeMethod v
- person Alex K.   schedule 02.03.2016LetSet v = ...
. - person Heinzi   schedule 03.03.2016