Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1764to1768
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
Inhaltsverzeichnis

VBA Schleife / Array endlos

VBA Schleife / Array endlos
17.06.2020 08:03:26
Julian
Hallo Forum,
als VBA-Anfänger komme ich bei meinem Skript an einer Stelle nicht weiter: Ich möchte gerne über eine Schleife ein vorangestelltes Skript bis zur letzten gefüllten Zeile wiederholt ablaufen lassen, wobei leere Zeilen einer bestimmten Spalte (N) übersprungen werden sollen. Mein bisheriger Versuch lief über ein Array,
dass die Zeilen allesamt aufzählt (1, 2, 3, ...), ich würde aber gerne das Makro automatisch bis zur letzten befüllten Zeile einfach durchlaufen können. Habt ihr vielleicht einen Hinweis oder Vorschlag, wie man das am besten umsetzen kann? Schon einmal vielen Dank im Vorraus. Das hier ist mein bisheriger Versuch, über den ich jedoch nicht hinaus gekommen bin:

Sub AllePDFs()
Dim zeilen_arr  As Variant
Dim Zeile As Long
zeilen_arr = Array(15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30)
For Zeile = 0 To UBound(zeilen_arr)
If Range("N" & zeilen_arr(Zeile)).Text  "" Then _
MergePDFs CSng(zeilen_arr(Zeile))
Next
End Sub

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Schleife / Array endlos
17.06.2020 08:12:46
MCO
Moin, Julian!
Das sollte genügen:
Sub AllePDFs()
Dim Zeil As Range
For Each Zeil In Range("N15:N" & Rows.Count).SpecialCells(xlCellTypeConstants)
MergePDFs Zeil.Row
Next
End Sub
Gruß, MCO
AW: VBA Schleife / Array endlos
17.06.2020 09:47:33
Julian
Danke für deine schnelle Antwort MCO,
ich hatte in meiner Beschreibung eine wichtige Funktion, die ich abbilden möchte, vergessen, da das Projekt ein Paar Wochen geruht hat:
Und zwar soll die Schleife bei der jeweiligen Wiederholung über eine Range modular mehrere Spalten ansprechen und in der nächsten Zeile (z.B. "A" & zl) den Wert um +1 erhöhen. Das Hauptskript, das die eigentliche Arbeit verrichtet, habe ich dann mit "Sub MergePDFs (z AS Single)" verbunden.
So sollen über die Range die in mehreren Spalten hinterlegten Dateipfade (Input- und Outputpfade) angesprochen werden.
Für diese Funktion wurde mir im Forum das Array empfohlen, allerdings ist es eben recht unpraktisch, wenn die Schleife über eine Auflistung funktioniert und nicht automatisch bis zur letzten Zeile durchläuft.
Lässt sich dein Skript auch um diese Zusatzfunktion erweitern? Vielen Dank für deine Hilfe.
https://www.herber.de/forum/archiv/1752to1756/1755848_Makro_mit_Schleife_fuer_naechste_Zeile.html
Anzeige
Witzig:
17.06.2020 22:15:23
Marc
Witzig, dass ich schon im alten Beitrag derjenige war, der dir bis dahin geholfen hat :-)
Dein Problem hab ich allerdings nicht verstanden. Du willst jetzt statt Zeilen auch Spalten ansprechen? Oder in den Zeilen jeweils Spalten?
Gruß, MCO
AW: Witzig:
18.06.2020 08:01:39
Julian
Hallo MCO,
danke nochmals für die Hilfe damals. Das ist wirklich witzig. Aber vielleicht kann ich mein Problem so besser beschreiben: Ich möchte gerne die Auflistung der Werte im Array (15, 16, 17,...) ersetzen, damit die Liste nicht manuell im Skript erweitert werden muss. Wenn man Sie z.B. über eine Range ("N15:N30") im Skript ansteuern könnte, wäre das schon sehr gut. Wenn man über eine Zelle im Tabellenblatt einfach die Range eingeben bzw. anpassen könnte, wäre das noch besser. Ist ds möglich?
Ich habe schon einen paar Ansätze ausprobiert, es hat aber nicht recht funktionieren wollen:
Dim zeilen_arr() as Variant
zeilen_arr = Range("N15"N30").Value
Das Range konfilktiert allerdings mit der Range in den folgenden Zeilen
oder
Sub AllePDFs()
Dim myworkbook As Worksheet
Dim myTable As ListObject
Dim zeilen_arr()  As Variant
Dim TempArray() As Variant
Dim Zeile As Long
Set myworkbook = ThisWorkbook.Worksheets("Automatisierung")
Set myTable = ActiveSheet.ListObjects("Table1")
TempArray = myTable.DataBodyRange.Columns(1)
zeilen_arr = Application.Transpose(TempArray)
For Zeile = LBound(zeilen_arr) To UBound(zeilen_arr)
If Range("N" & zeilen_arr(Zeile)).Text  "" Then
MergePDFs CSng(zeilen_arr(Zeile))
End If
Debug.Print zeilen_arr(Zeile)
Next Zeile
End Sub
Es folgt Laufzeitfehler 9 - Index außerhalb des gültigen Bereichs mit Bezug auf die Zeile Set mytable = ActiveSheet...
Ist meine Fragestellung so verständlicher ausgedrückt? Weißt du vielleicht eine Lösung? Vielen Dank für deine Mühe und Nachsicht.
Anzeige
AW: Witzig:
18.06.2020 08:10:41
Daniel
Hi
Wenn du an dieser Stelle den Laufzeitfehler 9 bekommst, hast du den Namen des ListObjekts in der Klammer ("Table1") falsch geschrieben.
Gruß Daniel
AW: Witzig:
22.06.2020 06:26:30
MCO
Hallo Julian!
Zelle im Tabellenblatt einfach die Range eingeben
Das haben wir doch schon gemacht mit

"Range(Spalte.specialcells(xlcelltypeconstants))
Zelle im Tabellenblatt einfach die Range eingeben bzw. anpassen könnte, wäre das noch besser.
Du kannst die Zeilen kommagetrennt irgendwo hinschreiben und dir dann den Inhalt verwenden
Zeilen_arr = Split(Deine Zelle,",")
Dieses Array kannst du dann wieder Schritt für Schritt durchlaufen.
Gruß, MCO
Anzeige

306 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige