Guten Tag alle Experten
Folgende Aufgabe:
Ich habe eine Reihe von Personen, und jeder Person will ich eine Anzahl von Code-Nummern zuordnen. Auf einer Vorlage sollen Dropdown-Listen miteinenader verbunden werden.
Konkret: Wähle ich aus der ersten Dropdown-Liste die Person XY, dann sollen in der zweiten Dropdown-Liste diejemigen Code-Nummern erscheinen, die der person XY zugeordnet sind.
Ob das in Word irgendwie möglich ist?
Ich bedanke mich für jeden Hinweis.
Zsolt
Hallo Zsolt,
das ist möglich. Dazu werden der Dropdownliste (Kombinationsbox) mit den Namen zwei Ereignis-Makros zugeordnet.
Das 1. Makro startet beim Anklicken der Box und erzeugt die Auswahlliste mit den Namen.
Das 2. Makro startet bei Änderung der Auswahl (des Wertes) des Namens und stellt in der Kombinationsbox für die Codes die zugehörige Auswahlliste ein.
Ich hab in meinem Beispiel-Makro die Namen und Codes im Makro aufgelistet, in diesem Fall ist es sinnvoll das VBA-Projekt oder die Dot-Datei gegen Änderungen zu schützen. Theoretisch könnte man Namen und Codes auch aus einer externen Datei abrufen. Dann muß aber der Zugriff von allen Anwender-Arbeitsplätzen gewährleistet sein.
In meinem Beispiel bezieht sich ComboBox1 auf die Auswahlliste mit den Namen und ComboBox2 auf die Auswahlliste mit den Codes.
Private Sub ComboBox1\_GotFocus()
Dim Namen() As String
AnzahlNamen = 5
'Für weitere Namen Anzahl erhöhen und Zeilen ergänzen
CodeAlt = ComboBox2.Value
ReDim Namen(AnzahlNamen)
Namen(0) = ""
Namen(1) = "Meier"
Namen(2) = "Schulze"
Namen(3) = "Kunze, B."
Namen(4) = "Kunze, A."
Namen(5) = "Bill"
With ComboBox1
Do Until .ListCount = 0
.RemoveItem (0)
Loop
For I = 0 To AnzahlNamen
.AddItem (Namen(I))
Next
End With
ComboBox2.Value = CodeAlt 'Wert wird wieder zugewiesen
End Sub
Private Sub ComboBox1\_Change()
Dim Codes() As String, Anwender As String
Dim NC() As String
'Liste der Namen und Codes in einer 2-dimensionalen Matrix
'Für weitere Codes Wert für Anzahl ändern und Codes am Ende nachtragen
Anzahl = 15 'Anzahl Zeilen mit Code-Nummern
ReDim NC(Anzahl, 2)
NC(1, 1) = "": NC(1, 2) = ""
NC(2, 1) = "Meier": NC(2, 2) = "ABCD"
NC(3, 1) = "Meier": NC(3, 2) = "1234"
NC(4, 1) = "Meier": NC(4, 2) = "12AB"
NC(5, 1) = "Schulze": NC(5, 2) = "XYCD"
NC(6, 1) = "Schulze": NC(6, 2) = "A234"
NC(7, 1) = "Kunze, B.": NC(7, 2) = "QQCD"
NC(8, 1) = "Kunze, B.": NC(8, 2) = "18934"
NC(9, 1) = "Kunze, B.": NC(9, 2) = "vCAB"
NC(10, 1) = "Kunze, B.": NC(10, 2) = "0AS2AB"
NC(11, 1) = "Kunze, A.": NC(11, 2) = "ST-2CD"
NC(12, 1) = "Kunze, A.": NC(12, 2) = "XJ34"
NC(13, 1) = "Kunze, A.": NC(13, 2) = "88-AB"
NC(14, 1) = "Bill": NC(14, 2) = "89uz"
NC(15, 1) = "Bill": NC(15, 2) = "PO-WE3"
' NC(16, 1) = "Name": NC(15, 2) = "Code"
Anwender = ComboBox1.Value
'Anzahl der Codes des Anwenders ermitteln
I = 0
Anzahlcodes = 0
Do
I = I + 1
If Anwender = NC(I, 1) Then
Anzahlcodes = Anzahlcodes + 1
End If
Loop Until I = Anzahl
If Anzahlcodes = 0 Then
MsgBox ("Ungültiger Name wurde eingegeben")
Exit Sub
End If
'Gültige Codes des Anwenders auslesen
ReDim Codes(Anzahlcodes)
I = 0
J = 0
Do
I = I + 1
If Anwender = NC(I, 1) Then
J = J + 1
Codes(J) = NC(I, 2)
If J = Anzahlcodes Then Exit Do
End If
Loop Until I = Anzahl
With ComboBox2
Do Until .ListCount = 0
.RemoveItem (0)
Loop
For I = 1 To Anzahlcodes
.AddItem (Codes(I))
Next
.Value = ""
End With
End Sub
Auf wunsch kann ich auch eine Beispieldatei per e-mail schicken
Gruß
Franz
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]