Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何在VBA中通过ByRef传递不定数量的布尔参数_Excel_Vba - Fatal编程技术网

Excel 如何在VBA中通过ByRef传递不定数量的布尔参数

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

我有一些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.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