Основная проблема, с которой вы сталкиваетесь, пытаясь обработать пользовательский интерфейс с несколькими состояниями, заключается в том, как учесть все различные возможные состояния пользовательских элементов управления (в вашем случае есть три флажка). Вы будете ie в узлах, пытаясь проработать перестановки, если спроектируете logi c на основе отдельных событий флажка.
Мой подход всегда заключался в том, чтобы извлечь лог c взаимодействия с пользователем за одну процедуру. Таким образом, вы всегда действуете логически, чтобы определить состояние ваших элементов управления (флажки) и как установить соответствующие элементы управления.
(я только думаю , что я понимаю ваш лог c из вашего описания. Измените этот пример ниже, чтобы он точно соответствовал вашим потребностям.)
В собственном модуле кода я чаще всего создаю простой метод для переключения состояния событий и отображает:
Option Explicit
Public Sub ToggleAppSettings(ByVal newState As Boolean)
With Application
.EnableEvents = newState
.ScreenUpdating = newState
End With
End Sub
Затем в модуле кода для рабочего листа, содержащего флажки:
Option Explicit
Private Sub CheckBox1_Click()
SetUXState
End Sub
Private Sub CheckBox2_Click()
SetUXState
End Sub
Private Sub CheckBox3_Click()
SetUXState
End Sub
Public Sub SetUXState()
'--- review the current checkbox status to determine -- and set --
' the visibility and usability state of user-exposed controls
ToggleAppSettings False
If CheckBox1.Value = False Then
'--- this is the simplest state, all other controls are disabled
' and worksheets are hidden
CheckBox2.Value = False
CheckBox2.Enabled = False
CheckBox3.Value = False
CheckBox3.Enabled = False
With ThisWorkbook
.Sheets("Deep Storage Box").Visible = False
.Sheets("Deep Storage Hanging").Visible = False
End With
Else
CheckBox2.Enabled = True
CheckBox3.Enabled = True
If CheckBox2.Value = True Then
ThisWorkbook.Sheets("Deep Storage Box").Visible = True
ThisWorkbook.Sheets("Deep Storage Hanging").Visible = False
CheckBox3.Value = False
CheckBox3.Enabled = False
ElseIf CheckBox3.Value = True Then
ThisWorkbook.Sheets("Deep Storage Box").Visible = False
ThisWorkbook.Sheets("Deep Storage Hanging").Visible = True
CheckBox2.Value = False
CheckBox2.Enabled = False
Else
ThisWorkbook.Sheets("Deep Storage Box").Visible = False
ThisWorkbook.Sheets("Deep Storage Hanging").Visible = False
End If
End If
ToggleAppSettings True
End Sub