как передать неопределенное количество логических аргументов ByRef в VBA - PullRequest
0 голосов
/ 01 мая 2020

У меня есть несколько опций пользовательской формы, которые я хочу сделать их значением ложным, и для этого мне нужна подпрограмма, которая получает неопределенное количество логических аргументов и делает их все ложными. Я попытался:

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

Он получает значения, но они не меняются в пользовательской форме

Я пробовал также это :

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

Но это дает мне ошибку несоответствия типов

1 Ответ

0 голосов
/ 01 мая 2020

Код ниже должен быть помещен в таблицу кодов вашей пользовательской формы, где он должен быть Private, потому что он не будет вызываться из другого модуля.

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

Вызовите подпрограмму с кодом следующим образом: -

Private Sub TestMakeFalse()
    MakeFalse 1, 2, 3, 5
End Sub

Обратите внимание, что вы можете передавать сами элементы управления, как вы пытались это сделать, но это выглядит как избыточная типизация. Как я предлагаю, вы можете составить имя элемента управления, просто указав его номер, и создать сам объект в подпрограмме, как только вы получите его имя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...