/ / Ich kann das Combobox_Change-Ereignis nicht stoppen. VBA löst ein anderes Combobox_Change-Ereignis aus - Excel, VBA, Excel-Vba

Combobox_Change-Ereignis kann nicht gestoppt werden, wenn VBA ein anderes Combobox_Change-Ereignis auslöst - Excel, VBA, Excel-VBA

Dieser hat mich erwischt - ich habe ein Formular mit drei Comboboxen darin und sie sind:

Bildbeschreibung hier eingeben

Umbrella_Dropdown: Der Umbrella_Dropdown_Change-Trigger ändert nicht die Werte in den anderen beiden Comboboxen, ändert jedoch das aufgelistete Element in ihnen (also löst es kein a aus _change Ereignis in den anderen beiden (keine Sorge über die Deklarationen - sie werden auf globaler Ebene erklärt)

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: Der MCH_Dropdown_Change-Trigger ändert die Werte der anderen beiden Comboboxen und obwohl ich enthalten bin Application.enableEvents = False unmittelbar vor der Änderung der Werte, aber es scheint den Trick nicht auszuführen und löst die Umbrella_Dropdown_Change- und Fund_Name_Dropdown_Change-Ereignisse aus:

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

Dasselbe gilt für dieFund_Name_Dropdown_Change-Ereignis, das die anderen auslöst (und obwohl ich nur meinen Code durchgegangen bin, sehe ich, dass dies eine unendliche "Schleife" hervorrufen würde, in der Fund_Name_Dropdown_Change MCH_Dropdown_Change auslöst, die Fund_Name_Dropdown_Change auslöst.)

Nur für den Fall, dass Sie den Code für das Fund_Name_Dropdown_Change -Ereignis anzeigen möchten, lautet dies folgendermaßen:

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

Was kann ich tun, um die Trigger auszuschalten ?! Wenn Sie weitere Informationen benötigen, lassen Sie es mich wissen.

Danke im Voraus

Antworten:

1 für die Antwort № 1

Application.EnableEvents hat meist keine Auswirkung auf die UserForm-Objekte.

Was Sie benötigen, ist eine Variable mit Formularumfang (am besten ist das Hinzufügen einer benutzerdefinierten Eigenschaft), um den Ereignisstatus des Formulars zu speichern und zu bearbeiten.

Sehen Sie sich dieses Beispiel an und überarbeiten Sie Ihren Code entsprechend:

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