Excel 如何在VBA中通过ByRef传递不定数量的布尔参数
我有一些userform选项,我想将它们的值设为false,为此我需要一个sub,它可以接收不定数量的布尔参数,并将它们全部设为false 我试过:Excel 如何在VBA中通过ByRef传递不定数量的布尔参数,excel,vba,Excel,Vba,我有一些userform选项,我想将它们的值设为false,为此我需要一个sub,它可以接收不定数量的布尔参数,并将它们全部设为false 我试过: Sub MakeFalse(ParamArray options()) For I = 0 To UBound(options) options(I) = False Next End Sub 这样称呼它: MakeFalse OptionButton1.Value,OptionButton2.Value,OptionButton3.Va
Sub MakeFalse(ParamArray options())
For I = 0 To UBound(options)
options(I) = False
Next
End Sub
这样称呼它:
MakeFalse OptionButton1.Value,OptionButton2.Value,OptionButton3.Value,OptionButton5.Value
它接收这些值,但它们不会在userform中更改
我也试过:
Sub MakeFalse(options() As Boolean)
For I = 0 To UBound(options)
options(I) = False
Next
End Sub
并通过以下方式进行调用:
b = Array(OptionButton1.Value,OptionButton2.Value,OptionButton3.Value,OptionButton5.Value)
MakeFalse b
但是它给了我类型不匹配的错误。下面的代码应该放在用户表单的代码表中,它应该是私有的,因为它不会从其他模块调用
Private Sub MakeFalse(ParamArray Options())
Dim i As Integer
For i = 0 To UBound(Options)
Me.Controls("OptionButton" & Options(i)).Value = False
Next
End Sub
使用如下代码调用sub:-
Private Sub TestMakeFalse()
MakeFalse 1, 2, 3, 5
End Sub
请注意,您可能会传递控件本身,就像您试图做的那样,但这看起来像是大量重复键入。按照我的建议,只需给出控件的编号,就可以组成控件的名称,并在获得名称后在子控件中创建对象本身。您只传递optionbutton控件的布尔值-该布尔值与控件之间没有链接。你应该把控制装置自己交出来。非常感谢,我喜欢你的精彩建议,这是非常有用的。我尝试过修改。一组文本框的visible属性,如:Me.ControlsOptionsi.Value=False,但它给了我对关键字Me的不正确使用,我尝试过:UserForm1.ControlsOptionsi.Value=False,但它使整个UserForm不可见。你能帮助我吗?请使用visible属性,而不是值Me指定当前对象。如果对象是用户表单,则是表单,否则通常是工作表。在ControlsOptions中,选项1必须是有效的控件名称。变量Options1代表字符串,如Me.ControlsTextBox1.Visible=False