Итак, просто чтобы ответить на мой вопрос благодаря помощи ТМ, в случае, если это может помочь кому-то еще (или если у кого-то есть что-то более чистое, чтобы предложить).
Я нашел две возможности:
Чтобы разрешить только один выбор для каждого столбца и строки, если элементы управления являются кнопками параметров:
- Содержит каждую строку или столбец в кадре, скажем, строка для этого примера
- Иметь класс с элементом управления в качестве свойства и control_click в качестве метода. Метод проверяет все элементы управления столбца (столбец, найденный по имени, если имя элемента управления имеет имя «имя» и переменная & numcolumn или благодаря номеру свойства столбца).
В общем случае для всех типов элементов управления и, черт возьми, я не ожидал, что буду так сильно бороться с флажками, которые принимают любое изменение за клик. метод. Метод проверяет все строки и столбцы благодаря массиву как свойству класса Arr (строка управления, столбец управления) или только благодаря имени с элементами управления с именем «Имя» & row & col
Пример для флажков с именем CheckBoxRxCy (т.е. CheckBoxR01C01)
В модуле (я использую определения для объявления всего)
Public ClickCtrl As Boolean 'the boolean which prevents the checkbox from going crazy
В классе ClassForExclusives (classe, который обрабатывает событие когда галочка изменена)
Public WithEvents ControlExcl As MSForms.CheckBox 'the control with events enabled
Private Sub ControlExcl_Click()
If ClickCtrl = False Then 'inhibits reaction to value change
GoTo line1
Else
For Each control2 In UserForm1.Controls
If control2.Name <> ControlExcl.Name Then 'avoid setting the tickbox xhanged to false
If Right(control2.Name, 2) = Right(ControlExcl.Name, 2) Or Mid(control2.Name, 10, 2) _
= Mid(ControlExcl.Name, 10, 2) Then 'same row/col
ClickCtrl = False
control2.Value = False
End If
End If
ClickCtrl = True 'allows the clicks to trigger the code again
Next control2
End If
line1:
End Sub
в пользовательской форме
Dim ArrControls() As New ClassForExclusives 'Set the array with the controls as ClassForExclusives
Private Sub UserForm_Initialize()
ClickCtrl = True
For Each Chkbox In Me.Controls
If TypeOf Chkbox Is MSForms.CheckBox Then
i = i + 1
ReDim Preserve ArrControls(1 To i)
Set ArrControls(i).ControlExcl = Chkbox
End If
Next Chkbox
End Sub