/ / Не можу зупинити Combobox_Change події VBA запуску іншої події Combobox_Change - excel, vba, excel-vba

Не вдається зупинити Combobox_Change події VBA, запускаючи іншу подію Combobox_Change - excel, vba, excel-vba

Це мене спіймало - у мене є форма з трьома комбобок в ньому, і вони:

введіть опис зображення тут

Umbrella_Dropdown: Umbrella_Dropdown_Change тригер не змінює значення в межах двох інших комбінацій, але змінює перерахований елемент всередині них (таким чином, він не викликає _change подія в двох інших (не турбуйтеся про декларації - вони оголошені на глобальному рівні):

Private Sub Umbrella_Dropdown_Change()

If Fund_Temination.Umbrella_Dropdown.ListIndex = -1 And Fund_Temination.Umbrella_Dropdown.Value <> "" Then
MsgBox "Please select from drop-down", vbInformation, "Select from drop-down"
Fund_Temination.Umbrella_Dropdown.Value = ""
Exit Sub
End If

sString = Umbrella_Dropdown.Value
l = 2
Fund_Temination.Fund_Name_Dropdown.Clear
Fund_Temination.MCH_Dropdown.Clear

Do Until l > WorksheetFunction.Max(Sheets("List of current funds").Range("C1048576").End(xlUp).Row, Sheets("List of current funds").Range("A1048576").End(xlUp).Row)
If sString = "" Then
If Trim(Sheets("List of current funds").Range("C" & l).Value) <> "" And Trim(Sheets("List of current funds").Range("A" & l).Value) <> "" Then
Fund_Temination.Fund_Name_Dropdown.AddItem Sheets("List of current funds").Range("C" & l).Value
Fund_Temination.MCH_Dropdown.AddItem Sheets("List of current funds").Range("A" & l).Value
End If
Else
If Trim(Sheets("List of current funds").Range("C" & l).Value) <> "" And Trim(Sheets("List of current funds").Range("B" & l).Value) = sString And Trim(Sheets("List of current funds").Range("A" & l).Value) <> "" Then
Fund_Temination.Fund_Name_Dropdown.AddItem Sheets("List of current funds").Range("C" & l).Value
Fund_Temination.MCH_Dropdown.AddItem Sheets("List of current funds").Range("A" & l).Value
End If
End If
l = l + 1
Loop

sString = ""

End Sub

MCH_Dropdown: MCH_Dropdown_Change тригер змінює значення двох інших комбобок і, хоча я включений Application.enableEvents = False безпосередньо перед зміною значень, але це, здається, не робить фокусу і не запускає події Umbrella_Dropdown_Change і File_Name_Dropdown_Change:

Private Sub MCH_Dropdown_Change()

If Len(Fund_Temination.MCH_Dropdown.Value) = 4 Then
If Not Fund_Temination.MCH_Dropdown.ListIndex = -1 Then
l = 1
Do Until l > WorksheetFunction.Max(Sheets("List of current funds").Range("C1048576").End(xlUp).Row, Sheets("List of current funds").Range("A1048576").End(xlUp).Row)
If Sheets("List of current funds").Range("A" & l).Value = Fund_Temination.MCH_Dropdown.Value Then
Application.EnableEvents = False
Fund_Temination.Fund_Name_Dropdown.Value = Sheets("List of current funds").Range("C" & l).Value
Fund_Temination.Umbrella_Dropdown.Value = Sheets("List of current funds").Range("B" & l).Value
Application.EnableEvents = True
GoTo Finish
End If
l = l + 1
Loop
Else
MsgBox "The MCH entered is not listed in the dropdown" & vbNewLine & vbNewLine & "Please re-enter the correct MCH or select from the dropdown", vbCritical, "Wrong MCH code entered"
Fund_Temination.MCH_Dropdown.Value = ""
End If
End If

Finish:

End Sub

Те саме можна сказати і дляFund_Name_Dropdown_Change пристрій, що запускає інші (і, хоча я лише пройшов крізь мій код, я бачу, що це призведе до нескінченної "циклу", де Fund_Name_Dropdown_Change запускає MCH_Dropdown_Change, що викликає "Fund_Name_Dropdown_Change" і так далі наприкінці часу ..)

У будь-якому разі, якщо ви хочете побачити код для події Name_Dropdown_Change, це так:

Private Sub Fund_Name_Dropdown_Change()

If Not Fund_Temination.Fund_Name_Dropdown.ListIndex = -1 Then
l = 1
Do Until l > WorksheetFunction.Max(Sheets("List of current funds").Range("C1048576").End(xlUp).Row, Sheets("List of current funds").Range("A1048576").End(xlUp).Row)
If Sheets("List of current funds").Range("C" & l).Value = Fund_Temination.Fund_Name_Dropdown.Value Then
Application.EnableEvents = False
Fund_Temination.MCH_Dropdown.Value = Sheets("List of current funds").Range("A" & l).Value
Fund_Temination.Umbrella_Dropdown.Value = Sheets("List of current funds").Range("B" & l).Value
Application.EnableEvents = True
GoTo Finish
End If
l = l + 1
Loop
End If

Finish:

End Sub

Що я можу зробити, щоб вимкнути активатори ?! Якщо вам потрібна додаткова інформація, будь ласка, дайте мені знати, але я думаю, що я перерахував все.

Спасибі заздалегідь

Відповіді:

1 для відповіді № 1

Application.EnableEvents не впливає на об'єкти UserForm, в основному (просто хеджування мого виступу, щоб люди не намагалися навести приклади)

Що вам потрібно, це змінна, яка має форму (найкращий спосіб - це додавання власної властивості) для зберігання та керування статусом події форми.

Перегляньте цей приклад і переробіть свій код за цим:

"/ UserForm with 2 CheckBoxes :  CheckBox1 and  CheckBox2
Private m_bEvents         As Boolean

Public Property Let EnableFormEvents(bVal As Boolean)
m_bEvents = bVal
End Property

Public Property Get EnableFormEvents() As Boolean
EnableFormEvents = m_bEvents
End Property

Private Sub CheckBox1_Click()

"/ Custom Event Status

Me.EnableFormEvents = False
Me.CheckBox2 = Me.CheckBox1
Me.EnableFormEvents = True

End Sub

Private Sub CheckBox2_Click()

If Me.EnableFormEvents Then
MsgBox "Check box clicked by user."
Else
MsgBox "Check box clicked by code."
End If
End Sub