gpt4 book ai didi

excel - 为什么我无法在 VBA 中向选项按钮发送参数

转载 作者:行者123 更新时间:2023-12-02 17:17:44 24 4
gpt4 key购买 nike

我在 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,那么我做错了什么?

最佳答案

您在这里遇到了 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。

关于excel - 为什么我无法在 VBA 中向选项按钮发送参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2051952/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com