VBA编译错误:语法错误

时间:2018-05-15 16:24:57

标签: vba

我正在尝试编写一个简单的函数,根据我传递的参数,我需要返回一个字符串值。我收到错误编译错误:语法错误。

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 :(得分:5)

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

答案 1 :(得分:4)

在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.PrintWrite#语句。

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

然而,这将在两个单独的行上输出:

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