Ваш код сопоставляет состояние управления с данными модели , поэтому единственный способ сообщить ему, что «именованный диапазон 32 включен» или «именованный диапазон 13 выключен»,заключается в изменении состояния флажка, который запускает событие Change
этого элемента управления.
Нет никакого способа обойти это, просто как работают элементы управления: они запускают событие Change
всякий раз, когда их значение изменяется, независимо от того, какэто сделано.
Вместо того, чтобы иметь состояние элементов управления быть данными, установить состояние элементов управления изменить данные.
Это требует концептуализации этогоdata, first: похоже, вам нужно связать число / индекс с некоторым логическим значением.Массив может сделать это.
Private namedRangeStates(1 To 35) As Boolean
Обратите внимание, что в зависимости от того, что вы делаете, инициализация состояния должна быть осуществлена путем итерации коллекции Names
книги в обработчике UserForm_Initialize
.Или, лучше, форма могла бы предоставить метод, который принимает массив логических значений и копирует это состояние в namedRangeStates
.
Теперь, когда флажок изменен, сделайте так, чтобы он изменил состояние:
Private Sub Checkbox31_Change()
namedRangeStates(31) = Checkbox31.Value
End Sub
Ваша форма может предоставлять это состояние как свойство:
Public Property Get NamedRangeState(ByVal index As Long) As Boolean
NamedRangeState = namedRangeStates(index)
End Property
Public Property Let NamedRangeState(ByVal index As Long, ByVal value As Boolean)
namedRangeStates(index) = value
End Property
И теперь вы можете изменять инкапсулированное состояние независимо от значений в выпадающем списке.