函数参数声明没有类型

时间:2018-02-04 16:43:52

标签: excel vba

对于一堂课,我偶然发现了一张excel表的VBA代码。它显示了函数的实现,其中参数尚未声明为任何类型。调用它时,String用作此参数。

Option Explicit

' The weird function
Function isXorEmpty(testvalue) As Boolean
    If testvalue = "x" Or testvalue = "" Then
        isXorEmpty = True
    Else
        isXorEmpty = False
    End If
End Function 

' Button click handler
Sub verify_input_conformity_Click()
    Dim testvalue As String
    testvalue = Sheets(0).Cells(0, SOME_COLUMN_CONSTANT)

    If Not isXorEmpty(testvalue) Then
        Call SomeFunction() 
    End If

End Sub 

代码在Excel中正常工作,即它检测到错误的输入值。

我已经在互联网上搜索了但是没有得出VBA的这种语言特性被调用的结论,以及当一个参数类型被忽略时它的行为方式。有人能指出我的文件吗?

1 个答案:

答案 0 :(得分:2)

Function isXorEmpty(testvalue) As Boolean

这隐含地等同于:

Public Function isXorEmpty(ByRef testvalue As Variant) As Boolean

对于两个字符串比较,Variant被隐式转换为Variant/String(两次);如果String以外的任何内容(实际上,无法隐式转换的任何)通过testValue传递,则可能发生运行时错误。

此外,隐式ByRef意味着isXorEmpty可能会在其正文中重新分配该参数,从而在调用代码中引入微妙的错误。

更好的签名是:

Public Function isXorEmpty(ByVal testvalue As String) As Boolean

那说条件体在两个条件分支中分配一个布尔文字 - 它可以改写如下:

isXorEmpty = (testvalue = "x" Or testvalue = "")