我在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,所以我做错了什么?
答案 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。