热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

VBA功能可选参数

如何解决《VBA功能可选参数》经验,为你挑选了2个好方法。

我多次调用一段特定代码,因此我想使用可选参数.我可以这样写:

Public Sub main()

strA = "A"

'Calling the function
CalculateMe (strA)

End Sub

Public Sub CalculateMe(strA As String)

    Set rs = DB.OpenRecordset("tbl_A")
    rs.MoveFirst
        Do Until rs.EOF
            If rs.Fields(0) = strA Then
                dblA = rs.fields(2).Value
            End If
            rs.MoveNext
        Loop
End Sub

如何更改功能以保存多个可选参数?

就像是:

Public Sub main()
strA = "A"
strB = "B"

'Calling the function
CalculateMe (strA, strB)

more code
End Sub

Public Sub CalculateMe(Optional strA As String, Optional strB as String)

    Set rs = DB.OpenRecordset("tbl_A")
    rs.MoveFirst
        Do Until rs.EOF
            If rs.Fields(0).Value = strA And rs.Fields(1).Value = strB Then
                dblA = rs.Fields(2).Value
            End If
            rs.MoveNext
        Loop
End Sub

按照Pankaj Jaju的建议,我已经设法通过将其更改为:

Public Sub main()
strA = "A"
strB = "B"

'Calling the function
dblA = CalculateMe (strA, strB)

End Sub

Public Function CalculateMe(Optional ByVal strA As String, Optional ByVal strB as String)

Set rs = DB.OpenRecordset("tbl_A")
rs.MoveFirst
    Do Until rs.EOF
        If rs.Fields(0).Value = strA And rs.Fields(1).Value = strB Then
            dblA = rs.Fields(2).Value
        End If
        rs.MoveNext
    Loop
End Sub

现在,我如何清除可选参数的值?我需要这个来进行一些计算.就像是:

Set strA = Nothing

Pankaj Jaju.. 12

更改您的子并添加 ByVal

Public Sub CalculateMe(Optional ByVal strA As String, Optional ByVal strB As String)

在运行时,如何判断是否提供了可选参数? (6认同)

既然你没有忽略他的问题,我会再问一次;)在运行时,你怎么知道是否提供了可选参数? (5认同)


Christopher .. 7

Public Sub CalculateMe(Optional varA As Variant, Optional varB as Variant)

摘自Chip Pearson的优秀解释:

管理可选参数使用的规则:

Optional关键字必须存在,使参数可选.

数据类型应该是(但不一定是,见下文)Variant数据类型.

可选参数必须位于参数列表的末尾.

IsMissing函数仅适用于声明为的参数Variant.False当与任何其他数据类型一起使用时,它将返回.

用户定义的类型(UTD)不能是可选参数.

Function Test(L1 As Long, L2 As Long, _
    Optional P1 As Variant, Optional P2 As Variant) As String

    Dim S As String

    If IsMissing(P1) = True Then
        S = "P1 Is Missing."
    Else
        S = "P1 Is Present (P1 = " & CStr(P1) & ")"
    End If

    If IsMissing(P2) = True Then
        S = S & "  " & "P2 Is Missing"
    Else
        S = S & "  " & "P2 Is Present (P2 = " & CStr(P2) & ")"
    End If

    Test = S
End Function

这里,L1和L2都是必需的,但P1和P2是可选的.由于两者都是Variant类型,我们可以使用IsMissing来确定参数是否被通过.IsMissing返回True如果Variant省略参数,或者False如果Variant参数包含在内.如果可选参数的数据类型是除以外的任何数据类型Variant,IsMissing则返回False.



1> Pankaj Jaju..:

更改您的子并添加 ByVal

Public Sub CalculateMe(Optional ByVal strA As String, Optional ByVal strB As String)


在运行时,如何判断是否提供了可选参数?
既然你没有忽略他的问题,我会再问一次;)在运行时,你怎么知道是否提供了可选参数?

2> Christopher ..:
Public Sub CalculateMe(Optional varA As Variant, Optional varB as Variant)

摘自Chip Pearson的优秀解释:

管理可选参数使用的规则:

Optional关键字必须存在,使参数可选.

数据类型应该是(但不一定是,见下文)Variant数据类型.

可选参数必须位于参数列表的末尾.

IsMissing函数仅适用于声明为的参数Variant.False当与任何其他数据类型一起使用时,它将返回.

用户定义的类型(UTD)不能是可选参数.

Function Test(L1 As Long, L2 As Long, _
    Optional P1 As Variant, Optional P2 As Variant) As String

    Dim S As String

    If IsMissing(P1) = True Then
        S = "P1 Is Missing."
    Else
        S = "P1 Is Present (P1 = " & CStr(P1) & ")"
    End If

    If IsMissing(P2) = True Then
        S = S & "  " & "P2 Is Missing"
    Else
        S = S & "  " & "P2 Is Present (P2 = " & CStr(P2) & ")"
    End If

    Test = S
End Function

这里,L1和L2都是必需的,但P1和P2是可选的.由于两者都是Variant类型,我们可以使用IsMissing来确定参数是否被通过.IsMissing返回True如果Variant省略参数,或者False如果Variant参数包含在内.如果可选参数的数据类型是除以外的任何数据类型Variant,IsMissing则返回False.


推荐阅读
author-avatar
勇_俊
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有