Чтобы сохранить имя CheckBox
в переменной, вы можете сделать что-то вроде:
Dim myCheckboxName as string
Dim Ctrl as Control
For each Ctrl in <UserForm>.MSForms.Controls
If TypeName(Ctrl) = "CheckBox" then
If Ctrl.Value = True Then
myCheckboxName = Ctrl.Name
End If
End If
Next Ctrl
Имейте в виду, чтобы заменить ссылку на вашу форму, это будет l oop через все элементы управления в вашей пользовательской форме, поэтому, если установлено более одного флажка, это приведет к сохранению последнего отмеченного флажка, к которому осуществляется доступ в l oop, но это дает вам представление о том, как найти установлен и присвоить имя переменной.
Я бы посоветовал использовать заголовок на CheckBox
вместо отдельного Label
, чтобы упростить ссылки и поиск в вашем коде. Что-то вроде:
Set myCheckBox = UserForm3.Controls.Add("Forms.CheckBox.1", "Test" & 1, True)
With myCheckBox
.Name = "myCheckBox" & y
.Caption = CaptionValue '<~~
.Left = 24
.Top = (17.5 + (y * 20))
End With
Затем вы можете определить, какие из CheckBox
будут проверены позже, и напрямую сослаться на его заголовок, вместо того, чтобы пытаться выработать хороший способ назвать / применить свои ярлыки, чтобы найти их как только вы найдете соответствующий флажок, который установлен.
Что-то вроде:
With UserForm3.CheckBox
For y = 1 To ColumnCount
If .Value = True Then
MsgBox .Caption & " is checked."
Else
MsgBox .Caption & " is not checked."
End If
Next y
End with
Я не понимаю, для чего вы собираетесь использовать заголовок в своем коде, поэтому я использовал ваш тест l oop в приведенном здесь примере.
Вы можете применить тот же принцип, если хотите, чтобы он оставался таким же, как использование CheckBox
и отдельного Label
для подписи, но вам нужно будет разработать хороший способ, чтобы иметь возможность для ссылки на правильный Label.Caption
, когда вы найдете отмеченные CheckBox
, например, присвоите им одинаковый номер и проверьте, что свойство .Name
совпадает с тем же номером, используя функцию Mid()
или что-то в этом роде.