为什么我不能在VBA中向OptionButton发送参数

时间:2010-01-12 20:04:34

标签: excel-vba vba excel

我在VBA中有以下功能:

Private Function Option1Checked(option1 As OptionButton) As Integer
    option1.ForeColor = vbGreen
    If (option1.Value = True) Then
        Option1Checked = 1
    End If
    Option1Checked = 0
End Function

每当我尝试像这样调用函数时

counter = counter + Option1Checked(OptionButton1)

我在运行时遇到类型不匹配错误。但是OptionButton1是OptionButton,所以我做错了什么?

1 个答案:

答案 0 :(得分:4)

你在这里遇到了VBA的一个“功能”。如果引用某些对象(如选项按钮)而未指定属性,则VBA假定您需要默认属性,而不是对象本身。对于选项按钮,默认属性为.Value,因此在您的代码中,OptionButton1不是选项按钮对象,而是TRUE或FALSE,具体取决于是否选中了OptionButton1。

您最好的选择是将功能更改为:

Private Function Option1Checked(option1 As Boolean) As Integer
    //option1.ForeColor = vbGreen
    If (option1 = True) Then
        Option1Checked = 1
    Else
        Option1Checked = 0
    End If
End Function

此处的缺点是,您无法将选项按钮的前景色更改为绿色,而无需按名称引用它。

可以为您提供所需功能的替代方法是将选项按钮的名称传递给您的函数。

Private Function Option1Checked(ByVal option1 As String) As Integer
    UserForm1.Controls(option1).ForeColor = vbGreen
    If (UserForm1.Controls(option1) = True) Then
        Option1Checked = 1
    Else
        Option1Checked = 0
    End If
End Function

Sub MyCountingRoutine()
    Dim str As String
    str = OptionButton1.Name

   counter = counter + Option1Checked(str)
End Sub

确保在函数的If..Then语句中包含Else,否则您将始终返回0。