Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1592to1596
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Change Ereignis in UserForm

Change Ereignis in UserForm
22.11.2017 14:34:24
Christian
Hallo Zusammen,
ich habe in einer UserForm zwei Comboboxen 3 und 4. Beide sind mit einem Change-Ereignis programmiert.
Kann ich diese irgendwie so steuern, dass das Change-Ereignis nur dann ausgelöst wird, wenn die Combobox tatsächlich angefasst wird und nicht über einen anderen Code "aus dem Hintergrund" befüllt wird?
Vielen Dank und viele Grüße
Christian

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Change Ereignis in UserForm
22.11.2017 14:55:09
Werner
Hallo Christian,
niemand hier weiß, was du vor hast.
das hier: nicht über einen anderen Code "aus dem Hintergrund" befüllt wird
verstehe ich zumindest nicht.
Schau dir doch mal die Events der Combobox an, da gibt es z.B. Click, DropButtonClick, Enter.
Vielleicht hilft es dir ja weiter.
Gruß Werner
AW: Change Ereignis in UserForm
22.11.2017 14:57:18
Nepumuk
Hallo Christian,
leg im Modul des Userforms eine lokale, boolsche Variable an die du beim Füllen auf True setzt und anschließend wieder auf False. Im Change-Event der Combobox fragst du den Wert der Variablen abe und nur wenn sie False ist führst du den Code aus.
Ein Beispiel:
Option Explicit

Private lblnNoEvent As Boolean

Private Sub ComboBox1_Change()
    If Not lblnNoEvent Then
        'Hier dein Code
    End If
End Sub

Private Sub UserForm_Initialize()
    lblnNoEvent = True
    Combobox_füllen
    lblnNoEvent = False
End Sub

Gruß
Nepumuk
Anzeige
AW: Change Ereignis in UserForm
22.11.2017 14:57:51
Peter(silie)
Hallo,
erstelle eine Variable die den Objekten vorgibt, ob es ihnen erlaubt ist
sich zu ändern.
Also:
Option Explicit
Private ChangeAllowed As Boolean
Private Sub UserForm_Initialize()
ChangeAllowed = False
ComboBoxen befüllen und Value setzen....
	ChangeAllowed = True 
End Sub
Private Sub ComboBox4_Change()
	If ChangeAllowed Then 
End if
End Sub 
Eine andere möglichkeit gibt es dafür nicht.
AW: Change Ereignis in UserForm
22.11.2017 15:22:53
Christian
Vielen Dank schon mal an alle...
ich versuche es mal besser zu beschreiben.
In dem Tabellenblatt "Dropdowns Analyse" befinden sich die Grundlagen der RowSources der Comboboxen.
Spalte T für Combobox 3, Spalte Y für Combobox 5.
Beide Spalten sind dynamisch, d.h. es ändern sich die Inhalte der Spalten und damit der Auswahl für die Comboboxen in Abhängigkeit der Eingaben.
So kann es kommen, dass durch die Eingabe in der ComboBox2 die bisherigen Auswahl in Spalte Y, also für die Combobox4, nicht mehr den Wert enthält, der sich noch in ComboBox 4 befindet. Immer genau dann soll dann der Wert der ComboBox 4 mit "Gesamt" überschrieben werden.
Auslöser des Ganzen ist der CommandButton3. In UserForm8 steht nur "Einen Augenblick bitte..."
Folgendes Szenario macht mich irre:
ComboBox3 = "Gesamt"
ComboBox4 = "Nora"
Durch eine Änderung in Combobox2 gilt "Nora" nicht mehr, so dass die ComboBox 4 mit "Gesamt" überschrieben werden soll. Das klappt.
Der Inhalt in ComboBox3 ("Gesamt") gilt weiterhin, nur hat das Wort/der Wert "Gesamt" in der Spalte T die Zelle gewechselt. In dieser Spalte T steht nun "Gesamt" in T8 und nicht, wie zuvor, in T9. In T9 findet sich nun "Einzelsicht". Und leider übernimmt die ComboBox3 nun die "Einzelsicht" aus T9.
Leider hat die Mappe sehr sensible Daten. Ich füge dennoch - mit der Bitte um Verständnis für die Länge der Ausführungen - mal die Codes ein.
Private Sub Combobox3_Change()
If Not lblnNoEvent Then
Dim strZeile As String
strZeile = "2"
If Worksheets("Dropdowns Analyse").Range("AF" & strZeile) = 0 Then Exit Sub
If Len(UserForm7.ComboBox3) = 0 Then
UserForm7.CommandButton5.Visible = False
UserForm7.ComboBox2.Locked = True
UserForm7.ComboBox2.BackColor = &H80000004
UserForm7.ComboBox4.Locked = True
UserForm7.ComboBox4.BackColor = &H80000004
Call Positions
Exit Sub
End If
If UserForm7.ComboBox3.Value = Worksheets("Dropdowns Analyse").Range("T" & strZeile).Value Then
UserForm7.CommandButton5.Visible = False
UserForm7.ComboBox2.Locked = False
UserForm7.ComboBox2.BackColor = vbWhite
UserForm7.ComboBox4.Locked = False
UserForm7.ComboBox4.BackColor = vbWhite
Call Positions
Exit Sub
End If
If Len(UserForm7.ComboBox3) > 0 And UserForm7.ComboBox3.Value  Worksheets("Dropdowns Analyse") _
.Range("T" & strZeile).Value Then
UserForm7.CommandButton5.Visible = True
UserForm7.ComboBox2.Locked = True
UserForm7.ComboBox2.BackColor = &H80000004
UserForm7.ComboBox4.Locked = True
UserForm7.ComboBox4.BackColor = &H80000004
Call Positions
Exit Sub
End If
End If
End Sub

Private Sub CommandButton3_Click()
lblnNoEvent = True
Dim strZeile As String
strZeile = "2"
UserForm7.CommandButton3.Visible = False
UserForm8.Show vbModeless
UserForm8.TextBox1.Text = "Einen Augenblick bitte..."
UserForm8.Repaint
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
With Worksheets("Dropdowns Analyse")
Worksheets("Dropdowns Analyse").Range("N" & strZeile) = UserForm7.ComboBox2.Value
Worksheets("Dropdowns Analyse").Range("T" & strZeile) = UserForm7.ComboBox3.Value
Worksheets("Dropdowns Analyse").Range("Y" & strZeile) = UserForm7.ComboBox4.Value
UserForm7.ComboBox3.Value = ""
UserForm7.ComboBox4.Value = ""
End With
Application.Calculation = xlCalculationAutomatic
If WorksheetFunction.CountIf(Worksheets("Dropdowns Analyse").Range("T7:T1000"), Worksheets(" _
Dropdowns Analyse").Range("T" & strZeile)) = 0 Then
Worksheets("Dropdowns Analyse").Range("T" & strZeile) = "Gesamt"
UserForm7.ComboBox3.Value = Worksheets("Dropdowns Analyse").Range("T" & strZeile).Text
End If
If WorksheetFunction.CountIf(Worksheets("Dropdowns Analyse").Range("T7:T1000"), Worksheets(" _
Dropdowns Analyse").Range("T" & strZeile)) > 0 Then
UserForm7.ComboBox3.Value = Worksheets("Dropdowns Analyse").Range("T" & strZeile).Text
End If
If WorksheetFunction.CountIf(Worksheets("Dropdowns Analyse").Range("Y7:Y1000"), Worksheets(" _
Dropdowns Analyse").Range("Y" & strZeile)) = 0 Then
Worksheets("Dropdowns Analyse").Range("Y" & strZeile) = "Gesamt"
UserForm7.ComboBox4.Value = Worksheets("Dropdowns Analyse").Range("Y" & strZeile).Text
End If
If WorksheetFunction.CountIf(Worksheets("Dropdowns Analyse").Range("Y7:Y1000"), Worksheets(" _
Dropdowns Analyse").Range("Y" & strZeile)) > 0 Then
UserForm7.ComboBox4.Value = Worksheets("Dropdowns Analyse").Range("Y" & strZeile).Text
End If
UserForm7.ComboBox3.RowSource = "'Dropdowns Analyse'!" & Worksheets("Dropdowns Analyse"). _
Range("T3")
UserForm7.ComboBox4.RowSource = "'Dropdowns Analyse'!" & Worksheets("Dropdowns Analyse"). _
Range("Y3")
Call Positions
lblnNoEvent = False
Application.ScreenUpdating = True
UserForm8.Hide
End Sub

Anzeige
AW: Change Ereignis in UserForm
23.11.2017 09:35:52
Christian
...kann mir denn niemand irgendwie helfen?
AW: Change Ereignis in UserForm
23.11.2017 11:04:50
Peter(silie)
Hallo,
arbeite nicht mit rowsource sondern füge die Daten in die List der Comboboxen ein...
Wie in allen Antworten bis Dato: Erstelle eine Variable die definiert ob geändert werden darf oder nicht.
Trenne deine Operationen auf, du machst alles in zwei Subs.
Die Sachen die du in deinem Click Event stehen hast, haben nichts mit dem Button zu tun und sollten in einen eigenen Sub der aufgerufen wird.
Erstelle dir eine Worksheet Variable... das ständige "Worksheets("xy").Range" kannst du dir sparen.
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("xy")
With ws
Debug.print .Range(.Cells(1, 20), .Cells(.Cells(.Rows.Count, 20).End(xlUp).Row, 20))
End With 

Anzeige
AW: Change Ereignis in UserForm
23.11.2017 12:10:45
Christian
Hallo Peter,
schon einmal HERZLICHEN Dank für Deine Antwort. Bevor ich mich daran setzen kann.. ich dachte ich hätte damit eine Variable definiert, die das überprüft:
Private Sub Combobox3_Change()
If Not lblnNoEvent Then

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige