Hallo zusammen Da ich noch absoluter VBA Einsteiger bin, benötige ich einen Rat von VBA Experten/Profis.
Folgendes Problem habe ich :
In einer Spalte habe ich ca. 2200 Einträge(Städte). Nun will ich diese Einträge aber in einem Kombinationsfeld ausgeben, da ich aber viele Städte mehr als 1 mal darin habe z.B. Dortmund 10 mal oder Hamburg 12 mal möchte ich das in dem Kombinationsfeld nur jeweils 1 mal jede Stadt anzeigt.
Die Suche soll ab Zeile 2("I2") beginnen, habe zwar die zugewíesen und beim ersten durchlauf zeigt er auch die erste Stadt an, sobald aber die 3 Zeile angesteuert werden soll zeigt er nur "",keine Ahnung warum.
In den Datenfelder sollte jeweils 1 Städte eingetragen und in Kombinationsfeld in reduzierter Form angezeigt. Nach einiger Suche in diversen VBA Büchern, habe ich als Idee von einem AutoFilter gelesen.(versuche sind im VBA Code )
Ich möchte das Problem, wenn möglich aber mit z.B. For-Schleifen & IfthenElse Verzweigungen lösen, geht das überhaupt?
Wie als Thema schon erwähnt, Werte (ca.2200 Zeilen z.B. Städte(Hamburg, Mainz, Karlsruhe, Dortmund usw.) soll es so Programmiert sein, dass jede Stadt nur 1 x im Kombinationsfeld dargestellt wird.
Hier mein VBA-Code:
Private Sub UserForm_Initialize()
Dim Zeile As Integer Zeile = 2 Dim Staedte()
As String Dim i As Integer
Dim Meldung As String
Dim gefunden As Boolean gefunden = False
Dim longZeileMax As Long
'
Ab Zeile 2 Von Spalte I beginnen(Karlsruhe)/Speichern von Stadt Wert in Zelle I2
ReDim Preserve Staedte(i) Staedte(i) = Range("I2") 'Wiederhole solange Zeilen nicht leer sind
Do While Cells(Zeile, 9) <> "" ReDim Preserve Staedte(i) 'Speichern der Städte
For i = 0 To UBound(Staedte) ' mit Ubound die Obergrenze setzen
If Staedte(i) = Cells(Zeile, 9) Then 'Wenn Falsch wahr wird dann geht es über die Exit For raus in die gefunden =
gefunden = False
Exit For
i = i + 1 'nächsten Index durchgehen Zeile
Zeile = Zeile + 1 'nächste Zeile durchgehen
End If
Next
ReDim Preserve Staedte(i) 'hier hinein,dann in die nächste For Schleife
For i = 0 To UBound(Staedte)
If Staedte(i) = Cells(Zeile, 9) Then
Me.cb_Staedte_Auswahl.ListIndex = 1'ab Kombinationsfeld ab Stelle 0 beginnen
'With Tabelle1 'Versuch eines Filters leider stürzt das Programm nach kurzer Zeit ab
'' .Range("L:L").ClearContents ' Einträge in Spalte L löschen
'Eindeutige Werte ermitteln '' '' .Range("I1").CurrentRegion.Column(2).AdvancedFilter _
'' Action:=xlFilterCopy, CopyToRange:=.Range("L1"), Unique:=True" "
'longZeileMax = .Cells(.Rows.Count, 6).End(xlUp).Row '' Me.cb_Länder_Auswahl.RowSource = Range("L2:L" & longZeileMax).Address ''
Me.cb_Länder_Auswahl.ListIndex = 0
' ' 'End With
Else
Me.cb_Staedte_Auswahl.AddItem Cells(Zeile, i)
End If
i = i + 1
Zeile = Zeile + 1
Next
Loop
End Sub
Vielen Dank für Eure Unterstützung Grüße Mirco( sry für meinen ersten nicht schönen Eintrag, jetzt sollte es besser zu lesen sein!)
|