我正在尝试编写一个简单的函数,根据我传递的参数,我需要返回一个字符串值。我收到错误编译错误:语法错误。
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
答案 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.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
然而,这将在两个单独的行上输出:
Sub test()
Debug.Print 1; 2; 3
Debug.Print 4; 5; 6 ' prints on the next line
End Sub