Ich habe ein Userform mit 2 Comboboxen und einer Textbox.
ComboBoxOrt ist von der Auswahl in ComboBoxStr abhängig, TextBoxTransp wiederum von der Auswahl in ComboBoxOrt.
In ComboboxStr wird ein Wert eingegeben (oder ausgewählt) in ComboboxOrt stehen daraufhin ein oder mehrere Werte und in TextBoxTransp steht der Wert Z oder L.
ComboBoxOrt wird beim öffnen des Formulars aus dem Blatt Orte gefüllt, bei Auswahl eines Wertes in der ComboboxStr aber aus dem Blatt Strassen.
Das Problem:
Wird in ComboBoxStr ein Wert eingetragen, zu dem es eigentlich in ComboBoxOrt keinen Wert gibt, bleibt in ComboBoxOrt immer der zuletzt gefundene Wert stehen.
- Wenn in ComboBoxStr im Beispiel der Wert Akf eingegeben wird
Funktionieren sollte es folgendermaßen:
- wählt der User einen Ort mittels ComboBoxOrt aus soll in der Textbox der entsprechende Wert eingetragen werden (funktioniert)
- gibt der User selbst einen Ort ein zu dem kein entsprechender Wert vorhanden ist, soll die Textbox leer bleiben
- wird in ComboBoxStr ein Wert eingegeben zu dem es im Blatt Strassen keinen Wert gibt sollen die ComboBoxOrt und die TextboxTransp leer bleiben
Ich bin leider nicht so bewandert in VBA, vieles ist durch Recherche und die Hilfe hier im Forum entstanden.
https://www.herber.de/bbs/user/92992.xlsm
Kann mir bitte Jemand weiterhelfen.
Der verwendete Code:
Beenden des UserForm "Transportzone" und starten des UserForm "FormulareAufrufen"
Private Sub CommandButton2_Click()
Unload Transportzone
FormulareAufrufen.Show
End Sub
Alle Boxen leeren und UserForm neu startenPrivate Sub CommandButton3_Click()
ComboBoxStr.Clear
ComboBoxOrt.Clear
TextBoxTransp.Value = ""
Unload Transportzone
Transportzone.Show
End Sub
TextBox - Hintergrund je nach EintragPrivate Sub TextBoxTransp_Change()
If TextBoxTransp.Value = "Z" Then
TextBoxTransp.BackColor = RGB(204, 219, 169)
End If
If TextBoxTransp.Value = "L" Then
TextBoxTransp.BackColor = RGB(154, 183, 214)
End If
End Sub
ComboBoxen füllen beim öffnen des UserFormPrivate Sub Userform_Initialize()
Dim lastrow As Integer
lastrow = Worksheets("Strassen").Cells(65536, 1).End(xlUp).Row
ComboBoxStr.List = Worksheets("Strassen").Range("A1:A" & lastrow).Value
lastrow = Worksheets("Orte").Cells(65536, 1).End(xlUp).Row
ComboBoxOrt.List = Worksheets("Orte").Range("A1:A" & lastrow).Value
End Sub
ComboBoxOrt nach Auswahl in ComboBoxStr füllenPrivate Sub ComboBoxStr_Change()
Dim arr As Variant
If ComboBoxStr.ListIndex >= 0 Then
arr = Worksheets("Strassen").Range("B" & ComboBoxStr.ListIndex + 1 & ":J" & ComboBoxStr. _
ListIndex + 1)
ComboBoxOrt.Column = arr
ComboBoxOrt.ListIndex = 0
End If
End Sub
TextBox nach Auswahl ComboBoxOrt füllenPrivate Sub ComboBoxOrt_Change()
Dim lastrow As Long
Dim gefunden As Range
With Worksheets("Orte")
lastrow = .Cells(Rows.Count, 1).End(xlUp).Row
Set gefunden = .Range("A1:A" & lastrow).Find(ComboBoxOrt.Value)
If Not gefunden Is Nothing Then
TextBoxTransp = gefunden.Offset(0, 1).Value
End If
End With
End Sub
Schließkreuz ausschaltenPrivate Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFormControlMenu Then Cancel = True 'Schließkreuz ausschalten
End Sub
Ich hoffe es ist einigermaßen verständlich.Danke fürs lesen!
mfg, Andreas