nachdem ich eine Woche unterwegs war hier Infos zu deinen letzten Fragen vom 31.03.2008
https://www.herber.de/forum/archiv/960to964/t963301.htm#964688
So halbwegs verstehe ich das Ganze. Mir ist allerdings auch nach ein bisschen rumprobieren nicht ganz klar, wie ich den Code nach meinen Bedürfnissen anpassen kann. Ich habe sowohl bei Combo-Box 1, als auch bei Combo-Box 2 noch ein paar Spalten einzufügen, die in die Tabelle Vertretungen nach Auswahl mit eingefügt werden sollen.
1. Wo kann ich das machen? (ich dachte bei "for intI = 1 to 3 muss ich den Wert einfach erhöhen. Klappt so aber nicht).
1. Du muss den Editiermodus in der Symbolleiste "Steuerelemente-Toolbox" aktivieren. Comboboxen werden dann angezeigt.
1a. Combobox wählen und dann rechte Maustaste -- Eigenschaften
1b. für "ColumnCount" die Zahl der Spalten angeben die in die Listbox übernommen werden sollen
1c. unter "ColumnWidth" die Breite der Spalten in der Combobox angeben. Für Spalten deren Werte in der Combobox nicht angezeigt werden sollen 0 Pt angeben.
1d. ggf. unter Width die Breite der Box anpassen (oder per Maus-Ziehen an den Focuspunkten)
1e. Editiermodus wieder deaktivieren
2. Im VBA-Editor muss du die Prozeduren zum Einlesen der Daten für die Combobox anpassen
2a. Prozedur ComboBox1Daten() bzw. ComboBox2Daten() suchen
2b. den Wert der Konstanten "intSpalten" auf die neue Anzahl der Spalten setzen die ausgelesen werden sollen.
2c. in der Select Case -Anweisung muss du für alle weiteren Spalten zusätzliche Case-Zeilen einfügen
Dabei muss du, um später die Daten einfach in die Tabelle Vertretung eintragen zu können, die Spalten in der Reihefolge in die Combobox einlesen, wie sie in der Tabelle "Vertretungen" ausgegeben werden sollen.
Beispiel:
For intSpalteArr = 1 To intSpalten
'Für jede Spalte der Combobox wird festgelegt, _
aus welcher Spalte der Tabelle der Wert ausgelesen wird
Select Case intSpalteArr
Case 1: lngSpalteListe = 1
Case 2: lngSpalteListe = 2
Case 3: lngSpalteListe = 3
Case 4: lngSpalteListe = 4
Case 5: lngSpalteListe = 7
Case 6: lngSpalteListe = 5
Case Else
lngSpalteListe = 0
MsgBox "Fehler, für Spalte " & intSpalteArr & " wurde noch kein Case-Fall definert"
End Select
If lngSpalteListe 0 Then
arrComboBox1(lngZeileArr, intSpalteArr) = .Cells(lngZeileListe, lngSpalteListe). _
Value
End If
Next
3. Im VBA-Editor muss du in den Prozeduren ComboBox1_Change bzw. ComboBox2_Change den Schleifenzähler an die Spaltenzahl der Combobox anpassen.
4. in Prozedur
Private Sub Worksheet_Activate()
Dim objBereich As Range
Const lngSpalteBereich As Long = 12 'Linke Spalte des Hilfsbereiches
muss du die 12 entsprechend vergrößern, damit beim Sortieren der Combobox-Auswahldaten keine Daten überschrieben/gelöscht werden.
2. Ausserdem ist die Reihenfolge der Spalten in der Tabelle Liste nicht identisch mit der Reihenfolge der Einträge in die Tabelle Vertretungen.
Kann ich das irgendwie auswählen (müsste doch mit "offset" zusammenhängen)?
siehe oben, Reihenfolge schon beim Einlesen der Daten in die Combobox festlegen. Geht auch anders. Dann darfst du beim Eintragen der Daten keine For-Next-Schleife verwenden, sondern muss für jede Spalte eine Anweisung schreiben wo der Wert aus der Combox eingetragen werden soll.
Private Sub ComboBox1_Change()
With Me.ComboBox1
If .LinkedCell = "" Then
Else
If .ListIndex -1 Then
'restliche Spalten des gewählten Eintrags in die Tabelle eintragen.
Me.Range(.LinkedCell).Offset(0, 1).Value = .List(.ListIndex, 1)
Me.Range(.LinkedCell).Offset(0, 2).Value = .List(.ListIndex, 2)
Me.Range(.LinkedCell).Offset(0, 3).Value = .List(.ListIndex, 5)
Me.Range(.LinkedCell).Offset(0, 4).Value = .List(.ListIndex, 4)
Me.Range(.LinkedCell).Offset(0, 5).Value = .List(.ListIndex, 3)
End If
End If
End With
End Sub
3. In der ursprünglichen Beispieldatei konnte ich einen Wert eintragen, der identisch mit dem Wert aus der Tabelle Liste war. Danach wurden die Daten der anderen Spalten automatisch eingetragen. Bei der neuen Datei funktioniert das nicht mehr (nur direkt über das Dropdown-Feld). Wie kann ich das einstellen?
Ich hab jetzt die Lösung in der ursprünlichen Datei nicht mehr im Kopf. Ich nehme an, dass dort ein Datensatz (Zeile in der Tabelle) durch den Wert in der verknüpften Zellen eindeutig definert ist. Da kann man dann einfach den Wert in der Zelle ändern, um die Daten aus den anderen Tabellen zu holen. In deinen Tabellen ist ein Datensatz nur durch die Kombination der Werte aus 2 oder mehr Spalten definiert. So ist die einfache Lösung nicht mehr möglich.
Gruß
Franz