Тип возврата не является Byte
per se, но vbMsgBoxResult
значение перечисления.
MSDN документы становятся все труднее и труднее найти, но в любом случае с Rubberduck вы получите CommandBar, который показывает контекстную метку, которая подтверждает тип возвращаемого значения:
Это идет от фактически погрузки связанных с проектом COM-библиотек и итерации типов COM и их членов (у меня есть репозиторий Rubberduck).
vbMsgBoxResult
будучи Enum
, основной тип является Long
, а не Byte
- вы можете легко подтвердить это в непосредственной панели:
?TypeName(VbMsgBoxResult.vbOK)
Long
Что касается скобок, нет ничего особенного MsgBox
- это тот же синтаксис, что и любая другая процедура Function
.
Причина это работает:
MsgBox ("Test")
Это потому, что вы заставляете аргумент строка "Test"
будет передаваться по значению (это что круглые скобки делают!)
И причина этого не работа:
MsgBox ("Test", vbOkOnly)
Это потому, что VBA не может оценить "Test", vbOkOnly
, как один единственный аргумент, чтобы передать ByVal
функции.
Это будет работать:
MsgBox ("Test"), (vbOkOnly)
Но будет выглядеть глупо.
При вызове VBA Function
как вы бы Sub
(то есть, когда вы не заботитесь о возвращаемом значении), необходимо опустить скобки или использовать [устаревший] явный Call
синтаксис:
Call MsgBox("Test", vbOkOnly)
Вы можете сделать «MsgBox» Hello world! », VbOKOnly,« Say Hi »' ''() 'требуется при использовании' = '. –
Если вам нравится '()', тогда поставим 'Call' перед' Call MsgBox («Hello world!», VbOKOnly, «Say Hi») ' –
Хорошо, спасибо за быстрый ответ. Теперь у меня есть три новых метода, чтобы что-то выразить :) @ScottCraner –