Подтвердить что ты не робот

MsgBox "" против MsgBox() в VBScript

Я пытаюсь написать VBScript, и я использую такие функции, как Randomize и MsgBox. Мне интересно, какова разница в использовании() и не использовании их. Например:

Randomize - Эта строка работает.

Randomize() - Эта строка также работает.

MsgBox "Hello world!" - Это работает.

MsgBox ("Hello world!") - Это также работает.

script будет работать на нескольких компьютерах с разными версиями Windows (по крайней мере, Windows XP). Мне интересно, будут ли возникать проблемы с совместимостью/синтаксисом при использовании этих функций.

4b9b3361

Ответ 1

Вызываемый кусок кода (подпрограмма) может быть Sub (вызванный для побочного эффекта/что он ) или Функция (вызванная для ее возвращаемого значения) или смесь обоих. Как документы для MsgBox

Отображает сообщение в диалоговом окне, ждет, пока пользователь нажмет кнопку и возвращает значение, указывающее, на какую кнопку нажал пользователь.

MsgBox (подсказка [, кнопки] [, название] [, справочный файл, контекст])

указывают, что эта процедура имеет третий вид.

Синтаксические правила VBScript просты:

Использовать список параметров() при вызове (подпрограмма a) Функция

Если вы хотите отобразить сообщение пользователю и знать réponse:

Dim MyVar
MyVar = MsgBox ("Hello World!", 65, "MsgBox Example")
   ' MyVar contains either 1 or 2, depending on which button is clicked.

Не используйте список параметров() при вызове (подпрограмма a) Sub

Если вы хотите отобразить сообщение пользователю и не заинтересованы в ответе:

MsgBox "Hello World!", 65, "MsgBox Example"

Эта красивая простота испорчена:

Конструктивный недостаток использования() для списков параметров и принудительного вызова по значению Семантика

>> Sub S(n) : n = n + 1 : End Sub
>> n = 1
>> S n
>> WScript.Echo n
>> S (n)
>> WScript.Echo n
>>
2
2

S (n) не означает "вызов S с n", а "вызов S с копией n значения". Программисты видят, что

>> s = "value"
>> MsgBox(s)

'works' находятся в ожидании, когда они пытаются:

>> MsgBox(s, 65, "MsgBox Example")
>>
Error Number:       1044
Error Description:  Cannot use parentheses when calling a Sub

Снижение компилятора в отношении empty() в подзаголовке. "Чистый" Sub Randomize (вызываемый для побочного эффекта установки случайного семени) может называться

Randomize()

хотя() не может означать "дать мне ваше возвращаемое значение" или "передать" что-то по стоимости ". Немного более строгость заставит программистов помните о различии в

Randomize n

и

Randomize (n)

Оператор вызова, который разрешает список параметров() в подзаголовках:

s = "значение"   Вызовите MsgBox (s, 65, "Пример MsgBox" )

которые еще больше поощряют программистов использовать() без размышлений.

(На основе Что значит "не может использовать круглые скобки?" )

Ответ 2

Насколько я знаю, это правила для вызова подпрограмм и функций в VBScript:

  • При вызове подпрограммы или функции, в которой вы отбрасываете возвращаемое значение, не используйте скобки
  • При вызове функции, где вы назначаете или используете возвращаемое значение, включайте аргументы в скобках
  • При вызове подпрограммы с использованием ключевого слова Call вставляются аргументы в скобках

Поскольку вы, вероятно, не используете ключевое слово Call, вам нужно только узнать правило, что , если вы вызываете функцию и хотите назначить или использовать возвращаемое значение, которое вам нужно заключить в круглые скобки. В противном случае не используйте круглые скобки.

Вот несколько примеров:

  • WScript.Echo 1, "two", 3.3 - вызов подпрограммы

  • WScript.Echo(1, "two", 3.3) - ошибка синтаксиса

  • Call WScript.Echo(1, "two", 3.3) - ключевое слово Call требует скобок

  • MsgBox "Error" - вызов функции "like" подпрограммы

  • result = MsgBox("Continue?", 4) - вызов функции, в которой используется возвращаемое значение

  • WScript.Echo (1 + 2)*3, ("two"), (((3.3))) - вызов подпрограммы, в которой аргументы вычисляются выражениями, включающими скобки (обратите внимание, что если вы окружите переменную скобкой в ​​списке аргументов, она изменяет поведение от вызова по ссылке на вызов по значению)

  • WScript.Echo(1) - видимо, это вызов подпрограммы с использованием скобок, но на самом деле аргумент - это просто выражение (1), и это то, что обычно путает людей, которые используются для других языков программирования, где вы должны указать скобки при вызове подпрограмм

  • Я не уверен, как интерпретировать ваш пример, Randomize(). Randomize - это подпрограмма, которая принимает единственный необязательный аргумент, но даже если подпрограмма не имела аргументов, допустимо называть ее пустой парой скобок. Кажется, что парсер VBScript имеет специальное правило для пустого списка аргументов. Тем не менее, мой совет состоит в том, чтобы избежать этой специальной конструкции и просто вызвать любую подпрограмму без использования скобок.

Я уверен, что эти синтаксические правила применяются в разных версиях операционных систем.

Ответ 3

Вы используете только один параметр внутри функции, поэтому он работает нормально в обоих случаях, например:

MsgBox "Hello world!"
MsgBox ("Hello world!")

Но когда вы будете использовать более одного параметра, в методе VBScript скобка будет выдавать ошибку, и без скобок будет работать так, как:

MsgBox "Hello world!", vbExclamation

Приведенный выше код будет работать плавно, но

MsgBox ("Hello world!", vbExclamation)

выдаст ошибку. Попробуй это!!: -)

Ответ 4

У вас есть разные подпрограммы и функции в vba... Как правило, (насколько я знаю), подпрограммы ничего не возвращают, а окружающие скобки необязательны. Для функций вам нужно написать скобки.

Что касается вашего примера, MsgBox - это не функция, а подпрограмма, и поэтому скобки в этом случае необязательны. Единственное исключение из функций - это когда вы не назначаете возвращаемое значение или когда функция не использует параметр, вы также можете оставить скобки.

Этот ответ идет немного подробнее, но в основном вы должны быть на стороне сохранения, когда вы предоставляете скобки для функций и оставляете их для подпрограмм.

Ответ 5

Чтобы показать всплывающее сообщение, вы можете использовать его.

MsgBox "Error.",vbCritical,"File Manager."
MsgBox "Warning.",vbExclamation,"File Manager."
MsgBox "Info.",vbInformation,"File Manager."
MsgBox "FAQ.",vbQuestion,"File Manager."