/ / Nie je možné zastaviť udalosť Combobox_Change VBA spustenie inej udalosti Combobox_Change - excel, vba, excel-vba

Nie je možné zastaviť udalosť Combobox_Change VBA spustenie inej udalosti Combobox_Change - excel, vba, excel-vba

Toto ma chytil - mám v ňom formu s troma komboboxmi a sú to:

tu zadajte popis obrázku

Umbrella_Dropdown: Funkcia Umbrella_Dropdown_Change trigger nezmení hodnoty v rámci ostatných dvoch kombinovaných boxov, ale v nich zmení zadanú položku (takže nespúšťa _change v ostatných dvoch prípadoch (nedávajte si obavy z vyhlásení - boli vyhlásené na globálnej úrovni):

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 spúšťa zmenu hodnôt ostatných dvoch kombinovaných boxov a hoci som zahrnutý Application.enableEvents = False bezprostredne pred zmenou hodnôt, ale nevyzerá to, že urobí trik a požiare z udalostí Umbrella_Dropdown_Change a Fund_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

To isté možno povedať aj preFund_Name_Dropdown_Change udalosť spúšťajú ostatné (a aj keď som len prešiel cez môj kód, vidím, že by to spôsobilo nekonečné "slučky", kde Fund_Name_Dropdown_Change spúšťa MCH_Dropdown_Change, čo by spustilo Fund_Name_Dropdown_Change a tak ďalej na konci času ..)

V každom prípade, len ak si chcete pozrieť kód pre udalosť Fund_Name_Dropdown_Change, je to toto:

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

Čo môžem urobiť na vypnutie spúšťačov ?! Ak potrebujete ďalšie informácie, dajte mi vedieť, ale myslím, že som uviedol všetko.

Vopred ďakujem

odpovede:

1 pre odpoveď č. 1

Application.EnableEvents nemá vplyv na objekty UserFormu väčšinou (len zabezpečenie môjho vyhlásenia, takže ľudia nezačnú dať mi príklady)

Čo potrebujete, je premenná v rámci formulára (najlepší spôsob je pridať vlastnosť vlastníka) na ukladanie a manipuláciu s stavom udalosti formulára.

Pozrite si tento príklad a prepracujte svoj kód takto:

"/ 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