Ошибка компиляции VBA: синтаксическая ошибка - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь написать простую функцию, в которой, основываясь на передаваемом параметре, мне нужно вернуть строковое значение. Я получаю ошибку Ошибка компиляции: синтаксическая ошибка.

Public Function getServer(env As String) As String
    Dim serverName As String
    Select Case env
        Case "DEV"
            serverName = "abc"
            Return serverName;
         Case "TEST"
            serverName = "def"
            Return serverName;
         Case "Prod"
            serverName = "xyz"
            Return serverName;
    End Select
End Function

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

В VBA оператор Return (который существует * ) служит совершенно другой цели; он используется в сочетании с устаревшим оператором GoSub, чтобы возвратить из скачка подпроцедуры:

    bar = 42
    GoSub Foo
    Exit Sub
Foo:
    Debug.Print bar
    Return

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

Функции и Property Get процедуры возвращают возвращаемое значение , присваивая идентификатору процедуры:

getServer = "abc"

Обратите внимание, что идентификатор процедуры по сути является локальной переменной, и поэтому присваивание не возвращает . Используйте Exit Function заявления, чтобы выручить.

Кроме того, {NEWLINE} - это маркер конца инструкции в VBA, а не ; точка с запятой; -)

Точка с запятой используется в VBA для управления поведением строковой печати, например Debug.Print и Write# операторов.

Sub test()
    Debug.Print 1; 2; 3;
    Debug.Print 4; 5; 6; ' prints on the same line as the previous statement
End Sub

Принимая во внимание, что это выведет на 2 отдельные строки:

Sub test()
    Debug.Print 1; 2; 3
    Debug.Print 4; 5; 6 ' prints on the next line
End Sub
0 голосов
/ 15 мая 2018

VBA не использует Return для досрочного выхода из функции или для указания возвращаемого значения функции. В VBA вы определяете ранний выход, используя Exit Function; и чтобы вернуть значение или объект из функции, вы должны присвоить / установить имя функции для значения / объекта, который вы хотите вернуть:

Public Function getServer(env As String) As String
    Select Case env
        Case "DEV"
            getServer = "abc"
        Case "TEST"
            getServer = "def"
        Case "Prod"
            getServer = "xyz"
    End Select
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...