Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
964to968
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
964to968
964to968
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

@onkelbobby Comboboxen, Auswahllisten

@onkelbobby Comboboxen, Auswahllisten
05.04.2008 11:34:37
fcs
Hallo onkelbobby,
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

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: @onkelbobby Comboboxen, Auswahllisten
10.04.2008 13:52:00
onkelbobby
Habe Deine Antwort noch entdeckt!
Herzlichen Dank!
Hast mir sehr geholfen! Jetzt komme ich klar!
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige