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

Eingabemaske (UserForm) mit abhängigen ComboBoxen

Eingabemaske (UserForm) mit abhängigen ComboBoxen
25.11.2017 19:25:16
Markus
Liebes Forum,
Anliegen:
Ich möchte die UserForm1 als Eingabemaske für das Tabelleblatt nutzen. Die ComboBoxen 1 und 2 sind voneinander abhängig. Sobald man ComboBox1 und 2 ausgewählt hat, füllen sich die ComboBoxen 3 und 4 und die TextBox1 automatisch. Die Werte befinden sich alle in einer Zeile.
In die ComboBoxen 3 und 4 gehören nur vordefinierte Werte. TextBox1 enthält sonstige Notizen und wird klassisch als Textbox individuell gefüllt. Sprich, jeder kann hier sonstige Einträge einfügen.
Aktueller Bearbeitungsstand:
Ich habe mir den unteren Code anhand diverser Foren zusammengestellt (vielleicht kann man mein Anliegen auch sinnvoller/eleganter lösen?) Die ComboBoxen 1 und 2 sind voneinander abhängig und die ComboBoxen 3 und 4 beinhalten nur vordefinierte Werte. Der Inhalt der TextBox1 wird auch korrekt angezeigt. Würde mal keine Änderung vornehmen wollen, würde der Code so „funktionieren“.
Problem:
Mein Hauptanliegen ist es die UserForm1 als Eingabemaske zu nutzen und damit Änderungen vorzunehmen. Hierzu befindet sich auf der UserForm ein Button “Speichern” (CommandButton1), welcher die vorgenommenen Änderungen speichert. Durch meine sehr durchwachsenen VBA-Kenntnisse gelingt mir diese Umsetzung bis jetzt leider nicht. Sobald ich eine Änderung vornehme und den “Speichern”-Button betätige, wird diese Änderung in Zeile 2 umgesetzt und nicht in der entsprechenden Zeile, die zur ComboBox1 und 2 Auswahl zugehörig ist.
Wäre sehr nett, wenn mir einer von euch helfen könnte mein Anliegen zu lösen.
Besten Dank im Voraus!
Option Explicit
Const C_mstrDatenblatt As String = "Tabelle1"
Dim mobjDic As Object
Dim mlngLast As Long
Dim mlngZ As Long
Private Sub ComboBox1_Enter()
Set mobjDic = CreateObject("Scripting.Dictionary")
For mlngZ = 2 To mlngLast
mobjDic(Worksheets(C_mstrDatenblatt).Cells(mlngZ, 1).Value) = 0
Next
Me.ComboBox1.List = mobjDic.keys
Set mobjDic = Nothing
End Sub
Private Sub ComboBox2_Enter()
'Zweite Combobox in Abhängigkeit von Combobox1.
'Jeder passende Stadt in Spalte B wird einmalig angezeigt.
Set mobjDic = CreateObject("Scripting.Dictionary")
With Worksheets(C_mstrDatenblatt)
For mlngZ = 2 To mlngLast
If .Cells(mlngZ, 1).Value = Me.ComboBox1.Value Then
mobjDic(.Cells(mlngZ, 2).Value) = 0
End If
Next
End With
Me.ComboBox2.List = mobjDic.keys
Set mobjDic = Nothing
End Sub
Private Sub ComboBox2_Change()
Dim mlngZ As Variant
Set mlngZ = Sheets("Tabelle1").Range("B1:B250").Find(ComboBox2)
If Nothing Is Nothing Then
ComboBox3 = Sheets("Tabelle1").Range("C" & mlngZ.Row)
ComboBox4 = Sheets("Tabelle1").Range("D" & mlngZ.Row)
TextBox1 = Sheets("Tabelle1").Range("E" & mlngZ.Row)
End If
End Sub

Private Sub CommandButton1_Click()
'Speichern Schaltfläche Ereignisroutine
Dim lZeile As Long
If Trim(CStr(ComboBox1.Text)) = "" Then
'Meldung ausgeben
MsgBox "Sie müssen mindestens einen Namen eingeben!", vbCritical + vbOKOnly, "FEHLER!"
'Abbrechen der Speicherroutine
Exit Sub
End If
lZeile = 2 'HIER IST MEIN PROBLEM Start in Zeile 2, Zeile 1 sind ja die Überschriften
'Schleife solange etwas in der ersten Spalte in Tabelle 1 drin steht
Do While Trim(CStr(Tabelle1.Cells(lZeile, 1).Value))  ""
'Eintrag gefunden, TextBoxen in die Zellen schreiben
Tabelle1.Cells(lZeile, 1).Value = Trim(CStr(ComboBox1.Text))
Tabelle1.Cells(lZeile, 2).Value = ComboBox2.Text
Tabelle1.Cells(lZeile, 3).Value = ComboBox3.Text
Tabelle1.Cells(lZeile, 4).Value = ComboBox4.Text
Tabelle1.Cells(lZeile, 5).Value = TextBox1.Text
Exit Do 'Vorzeitiges Ende, da der Datensatz schon gefunden ist
Loop
End Sub

Private Sub CommandButton2_Click()
Unload Me
End Sub

Private Sub UserForm_Initialize()
'Bei Start der Userform wird die unterste Zeile in Spalte A ermittelt
mlngLast = Worksheets(C_mstrDatenblatt).Cells(Rows.Count, 1).End(xlUp).Row
With Me.ComboBox3
.AddItem "a"
.AddItem "b"
.AddItem "c"
End With
With Me.ComboBox4
.AddItem "gut"
.AddItem "mittel"
.AddItem "schlecht"
End With
End Sub

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Eingabemaske (UserForm) mit abhängigen ComboBoxen
25.11.2017 19:35:28
onur
Ich weiss ja nicht, wie die Comboboxen "gefüttert" wurden.
Wenn der erste Eintrag von Zeile 2, der zweite von Zeile 3 und so weiter, müsste lZeile nicht =2, sondern =2 + Combobox1.Listindex lauten.
AW: Eingabemaske (UserForm) mit abhängigen ComboBoxen
26.11.2017 13:49:52
Markus
Lieber Onur,
erstmal Dankeschön, dass du dich meines Anliegen angenommen hast. Ich glaube, ich habe mich etwas missverständlich ausgedrückt. Ich will im Endeffekt einfach eine Bearbeitungsmaske erstellen, welche die in Tabelle 1 vorhandenen Daten ändert/anpasst.
Bsp.
Zeile 1 | Spalte A: Audi - Spalte B: A1 - Spalte C: 100 PS - Spalte D: Gute Fahreigenschaften - Spalte E: abc...
Zeile 2 | Spalte A: Audi - Spalte B: A2 - Spalte C: 200 PS - Spalte D: Durchschnittliche Fahreigenschaften - Spalte E: abcd ...
Zeile 3 | Spalte A: Audi - Spalte B: A3 - Spalte C: 300 PS - Spalte D: Schlechte Fahreigenschaften - Spalte E: abcde ...
Zeile 4 | Spalte A: Audi - Spalte B: A4 - Spalte C: 400 PS - Spalte D: Gute Fahreigenschaften - Spalte E: abcdef ...
In Spalte C kann die ComboBox3 nur folgende Werte annehmen: 100 PS, 200 PS, 300 PS, 400 PS
In Spalte D kann die ComboBox4 nur folgende Werte annehmen: Gute Fahreigenschaften, Durchschnittliche Fahreigenschaften, schlechte Fahreigenschaften
In Spalte E befinden sich eine TextBox, welche einfach einen individuellen Textinhalt besitzt.
Mein Anliegen:
Ich wähle in ComboBox1: Audi aus, dann in ComboBox2 A2 aus. Anschließend steht automatisch in CB3: 200 PS, in CB4: Durchschnittliche Fahreigenschaften und in der TextBox: abcd
Nun möchte ich beispielsweise den "Wert" in ComboBox4 zu "Gute Fahreigenschaften" ändern und anschließend mit CommandButton1 speichern/übernehmen.
Sodass nun in Spalte A, Zeile 2 folgendes steht:
Spalte A: Audi - Spalte B: A2 - Spalte C: 200 PS - Spalte D: GuteFahreigenschaften - Spalte E: abcd ...
Vielen Dank nochmal!
Anzeige
AW: Eingabemaske (UserForm) mit abhängigen ComboBoxen
26.11.2017 14:13:49
onur
Poste mal die datei, ist besser als 1000 Erläuterungen.
AW: Eingabemaske (UserForm) mit abhängigen ComboBoxen
26.11.2017 14:55:34
Markus
Hallo Onur,
anbei meine Datei. Wie ich es vorhin erwähnt habe, geht es mir darum eine Bearbeitungsmaske zu erstellen, welche die vorhandenen Daten verwaltet/ändert. Ich will keinen neuen Datensatz hinzufügen.
Mein VBA ist aus diversen Foren zusammengewürfelt - kann man bestimmt eleganter/besser lösen.
https://www.herber.de/bbs/user/117923.xlsm
Vielen Dank dir/euch für eure Mühe!
AW: Eingabemaske (UserForm) mit abhängigen ComboBoxen
26.11.2017 15:47:28
onur
Habe alles neu geschrieben.
https://www.herber.de/bbs/user/117924.xlsm
Anzeige
AW: Eingabemaske (UserForm) mit abhängigen ComboBoxen
26.11.2017 16:11:35
Markus
Lieber Onur,
musste nur ein paar Kleinigkeiten anpassen - ansonsten hast du es genauso hinbekommen, wie ich es haben wollte. Besten Dank für deine Mühe - echt Top!

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige