自己写的一个函数,有一个参数是可选的,但程序中会用于判断,从而引发错误,现在想知道如何判断可选参数是否传过来以跳过此语句,望各位大虾赐教!

解决方案 »

  1.   

    如果是 Variant 类型的参数,可以用 IsMissing() 判断
    Option ExplicitSub Main()
        Test
        Test True
        Test False
        Test "abc"
    End SubSub Test(Optional ByVal arg As Variant)
        If IsMissing(arg) Then
            Debug.Print "a Is Missing"
        ElseIf arg = True Then
            Debug.Print "a = True"
        ElseIf arg = False Then
            Debug.Print "a = False"
        Else
            Debug.Print "a = ?"
        End If
    End Sub
      

  2.   

    Dim strName As String
    Dim strName1 As String
    Dim varAddress As Variant
    Private Sub ListText(x As String, Optional y As Variant)
       List1.AddItem x
       If Not IsMissing(y) Then
        
          List1.AddItem y
       End If
    End SubPrivate Sub Command1_Click()
       strName = "第一个参数"
    Call ListText(strName) '未提供第二个参数
    End Sub
    Private Sub Command2_Click()
       strName = "第一个参数"
       strName1 = "第二个参数"
    Call ListText(strName, strName1)  '未提供第二个参数
    End Sub
      

  3.   

    赋初值是一个办法;利用variant类型变量的"丢失"标志位,使用ismissing来判断是否传值进来了也是一个办法.
      

  4.   


    我在字符串型可选参数判断中,常常用 IsNull() 函数。
      

  5.   

    dim a as variant ' 下边的这些IsXXX函数都要求变量是Variant类型的.
    debug.print IsEmpty(a) ' 这里的a还没有赋初值,所以是IsEmpty(a)为真a = Null
    debug.print IsNull(a) ' 这里的a的值为Null,所以IsNull(a)返回真call testsub test(optional byval arg as variant)
        debug.print IsMissing(arg) ' 调用test的时候,没有传递参数(参数arg丢失了),所以IsMissing(arg)返回真
    end sub
      

  6.   

    dim a as variant ' 下边的这些IsXXX函数都要求变量是Variant类型的.
    debug.print IsEmpty(a) ' 这里的a还没有赋初值,所以是IsEmpty(a)为真a = Null
    debug.print IsNull(a) ' 这里的a的值为Null,所以IsNull(a)返回真call testsub test(optional byval arg as variant)
        debug.print IsMissing(arg) ' 调用test的时候,没有传递参数(参数arg丢失了),所以IsMissing(arg)返回真
    end sub