Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA Schleife
#1
Huhu Leute,

ich habe hier folgenden Code:

Code:
  If Range("F29").Value <> "END" Then
   .AddItem Range("F29").Value   'Index 0
  End If
  If Range("G29").Value <> "END" Then
   .AddItem Range("G29").Value
  End If
  If Range("H29").Value <> "END" Then
   .AddItem Range("H29").Value
  End If
   If Range("I29").Value <> "END" Then
   .AddItem Range("I29").Value
  End If
  If Range("J29").Value <> "END" Then
   .AddItem Range("J29").Value
  End If
  
Das ist nur ein Ausschnitt.
In X-Achsenrichtung stehen Jahreszahlen. 2019, 2020, 2021....
Irgendwann steht dort END - das variiert je nach Einstellung.
Ich möchte einer Dropdownliste alle Jahreszahlen BIS zu diesem END einfügen.
Also bei 2019, 2020, 2021, END, END, END ---> dann soll die Dropdown enthalten: 2019, 2020, 2021
Mein Code oben funktioniert auch - allerdings ist das doch sehr umständlich und viel Code.
Kann man das mit einer Schleife eleganter machen?
Antworten Top
#2
Da brauchst du keine Schleife (geht natürlich auch), nutze einfach die Range.Find-Methode, um die Spalte mit END zu finden.
Schöne Grüße
Berni
[-] Folgende(r) 1 Nutzer sagt Danke an MisterBurns für diesen Beitrag:
  • DieMarie
Antworten Top
#3
(21.01.2019, 12:06)MisterBurns schrieb: Da brauchst du keine Schleife (geht natürlich auch), nutze einfach die Range.Find-Methode, um die Spalte mit END zu finden.

Wie würde das dann ca. aussehen?

Code:
With Worksheets(1).Range("F29:Y29")
   Set c = .Find(<>"END", lookin:=xlValues)
   If Not c Is Nothing Then
       firstAddress = c.Address
       Do
           .AddItem Range("F29").Value
            .AddItem Range("G29").Value
           ....
        Loop While Not c Is Nothing And c.Address <> firstAddress
   End If
End With

Ich habe die Methode noch nie genutzt und habe daher keine Ahnung.
Beispiele im Internet suchen damit immer nur bestimmte Werte. Wie man damit eine fortlaufende Jahreszahl bis zum Wert END prüft und jedes Mal .AddItem mit dem Wert ausführt ist mir noch nicht so ganz klar.

Die Werte stehen in F29:Y29.

Es wäre super lieb, wenn mir jemand einen Tipp gibt :)
Antworten Top
#4
Das geht zB so

Code:
Sub test1()
Dim Suche As Range
Dim i As Integer

Set Suche = Range("F29:Y29").Find(what:="END", lookat:=xlWhole)
If Not Suche = Nothing Then
   For i = 6 To Suche.Column - 1
   Userform1.Combobox1.AddItem Cells(29, i)
   Next i
End If

End Sub

oder so

Code:
Sub test2()
Dim i As Integer

i = 6
Do While Cells(29, i) <> "END" And i <= 25
   Userform1.Combobox1.AddItem Cells(29, i)
   i = i + 1
Loop

End Sub
Schöne Grüße
Berni
[-] Folgende(r) 1 Nutzer sagt Danke an MisterBurns für diesen Beitrag:
  • DieMarie
Antworten Top
#5
Super, danke :)

Funktioniert einwandfrei.
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste