VBS не позволяет программировать - PullRequest
0 голосов
/ 13 марта 2019

Я занимался программированием и получаю сообщение об ошибке при попытке запустить его. мой код:

MsgBox ("hi")
sleep (2)
MsgBox ("you ok" vbYesNo, "how are you?")

Select Case result
    Case vbYes,
        MsgBox ("that's good!")
    Case vbNo, MsgBox ("sorry to hear that.")
End Select

Линия: 3
Char: 18
Ошибка: ожидается ')' Источник: ошибка компиляции Microsoft VBScript.

1 Ответ

2 голосов
/ 14 марта 2019

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

  1. Синтаксис отсутствующего аргумента в MsgBox() Функция:

    Линия: 3

    Char: 18

    Ошибка: ожидается ')' Источник: ошибка компиляции Microsoft VBScript.

    потому что функция MsgBox() ожидает аргументы, разделенные запятой, но разделитель аргументов после "you ok" отсутствует, в результате чего компилятор выдает исключение.

  2. Невозможно использовать скобки при вызове Sub:

    При вызове процедуры, которая не возвращает значение, используя скобки вокруг нескольких аргументов, переданных процедуре, это приведет к;

    Ошибка компиляции Microsoft VBScript: невозможно использовать круглые скобки при вызове Sub

    Здесь есть предостережение: если это всего лишь один аргумент, его не скомпилируют, но это не потому, что он принимает один аргумент, а потому, что он видит скобки как часть аргумента, а не часть процедуры (Эрик Липперт подробно обсуждает это в своем блоге ) ;

    MsgBox("Hi") 'Will work
    

    Это эквивалентно письму;

    Call MsgBox(("Hi")) 'Note the extra brackets
    

    Это может немного сбивать с толку, поэтому, когда дело доходит до нескольких аргументов, вы можете подумать, что это нормально;

    MsgBox("you ok", vbyesno, "how are you?") 'This will error
    

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

    1. Снять скобки

       MsgBox "you ok", vbyesno, "how are you?"
      
    2. Возвращает значение (если процедура может вернуть значение)

       result = MsgBox("you ok", vbYesNo, "how are you?")
      

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

    3. Используйте оператор Call для префикса вызова процедуры

       Call MsgBox("you ok", vbYesNo, "how are you?")
      
  3. Синтаксическая ошибка:

    Ошибка компиляции Microsoft VBScript: синтаксическая ошибка

    Это сводится к запятой после аргументов Case, просто удалите запятые и код скомпилируется.

    Select Case result
    Case vbYes
      Call MsgBox("that's good!")
    Case vbNo
      Call MsgBox("sorry to hear that.")
    End Select
    
  4. Продолжительность Sleep:

    Функция Sleep() ожидает значение, выраженное в миллисекундах, а не в секундах, в данный момент пример кода ожидает 0,002 секунды. Чтобы подождать 2 секунды (что я и предполагал) use;

    Call Sleep(2000)
    

Полезные ссылки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...