Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA per Schleife wiederholen bis leere Zelle

VBA per Schleife wiederholen bis leere Zelle
09.06.2015 07:32:25
Björn
Guten Morgen, ich habe folgende Frage:
in einer Tabelle mit mehreren Tabellenseiten, möchte ich auf einer Seite, etwas ausdrucken, und nach dem Druck eine bestimmte Zelle um einen Zähler erhöhen.
Das klappt auch schon prima, mit folgendem Code:
Sub Drucken_fortlaufend()
' Drucken_fortlaufend Makro
' Ein Makro, welches bei jedem starten, eine Rechnung druckt und die lfd Nummer um 1 erhöht
' Tastenkombination: Strg+y
Application.Goto Reference:="Drucken_fortlaufend"
Dim wert As String
ActiveWindow.SelectedSheets.PrintOut 'Druckt den angegebenen Druckbereich
wert = Range("H18").Value ' Bereich, wo Wert ist: H18 abändern
Range("H18").Value = wert + 1 ' H18 abändern
ActiveWorkbook.Save
End Sub
meine Frage ist nun, wie kann ich dieses Makro so oft durchlaufen lassen, bis in einer Zelle, einer definierten Spalte, auf einem anderem Tabellenblatt, eine leere Zelle und somit das Ende der Tabelle erreicht ist?
Über Infos wäre ich sehr dankbar.

Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Bahnhof?
09.06.2015 09:04:33
UweD
Hallo
ich verstehe den Zusammenhang nicht?
Was hat das Eine mit dem Anderen zu tun?
Hast du mal eine Musterdatei?
LG UweD

AW: Bahnhof?
09.06.2015 10:07:44
Björn
Auf dem Einen Blatt, ist eine Rechnung hinterlegt, hier gibt es ein Feld (H18) welches im nicht Druckbaren Bereich ist und durch das Makro immer nach dem Drucken um eins erhöht wird.
Mit dieser Zelle wird bewirkt, dass das Rechnungsblatt sich alle Daten aus dem anderen Tabellenblatt zieht.
(Also Verkaufsdatum, Artikel usw.)
Jetzt würde ich halte gern, diesen Druck soweit laufen lassen, bis in Spalten eins, des TAbellenblatts mit allen Daten die erste Leerzeile erreicht ist.
Vielleicht ist weißt Du jetzt was ich meine?
LG
Björn

Anzeige
AW: VBA per Schleife wiederholen bis leere Zelle
09.06.2015 09:07:09
Kenny
Weiß jetzt nicht genau wie dein Workbook aussieht, aber prinzipiell kannst du es folgendermaßen umsetzen:

Sub Drucken_fortlaufend()
' Drucken_fortlaufend Makro
' Ein Makro, welches bei jedem starten, eine Rechnung druckt und die lfd Nummer um 1 erhöht
' Tastenkombination: Strg+y
do while worksheets("tabelle2").cells(zeile,5)  "" 'solange in der Zelle was steht ausführen
Application.Goto Reference:="Drucken_fortlaufend"
Dim wert As String
ActiveWindow.SelectedSheets.PrintOut 'Druckt den angegebenen Druckbereich
wert = Range("H18").Value ' Bereich, wo Wert ist: H18 abändern
Range("H18").Value = wert + 1 ' H18 abändern
ActiveWorkbook.Save
zeile = zeile + 1
loop
End Sub
Jetzt würde das Programm sooft drucken bis in der Spalte 5 von Tabelle 2 eine leere Zelle erreicht ist.
Liebe Grüße

Anzeige
AW: VBA per Schleife wiederholen bis leere Zelle
09.06.2015 10:02:44
Björn
Vielen Dank für Deine schnelle Antwort.
Ich habe ("tabelle2"). gegen ("Gesamt Einnahmen2015"). getauscht, und (zeile,5) gegen (zeile,1)
Hier wirft er mir aber einen Fehler aus.
Laufzeitfehler `1004`
wenn ich auf Debuggen gehe, wird folgende Zeile im Makro markiert:
Do While Worksheets("Gesamt Einnahmen2015").Cells(zeile, 1) "" 'solange in der Zelle was steht ausführen
mir ist gerade aufgefallen, dass in diesem Bereich (zeile, 1) immer ein Leerzeichen vor die 1 rutscht. Ist das richtig so?
Eigentlich müsste doch auch eine Spalte, statt einer Zeile gemeint sein, ist das egal?

Anzeige
AW: VBA per Schleife wiederholen bis leere Zelle
09.06.2015 10:12:12
UweD
Hallo
Zeile= 1
vor die Do While Schleife setzen
Es gibt keine Zeile 0 in Excel
Zeile=1
do while worksheets("tabelle2").cells(zeile,5)  "" 'solange in der Zelle was steht ausführen
Application.Goto Reference:="Drucken_fortlaufend"

Anzeige
AW: VBA per Schleife wiederholen bis leere Zelle
09.06.2015 10:30:08
Björn
Ok, hab ich versucht, das klappt auch, allerdings nur 2 Ausdrucke, dann hört das auf.
Zeile 0 ? Keine Ahnung, in dem Code kann ich Zeile 0 nicht finden.
Ich habe zusätzlich versucht:
Zeile = Zeile + 1
an die stelle zu setzten, die Du empfohlen hast. Dabei hört er aber gar nicht mehr auf zu drucken, was echt eine Herausforderung war, dass Programm zum Abbruch zu bewegen :-)

Anzeige
AW: VBA per Schleife wiederholen bis leere Zelle
09.06.2015 11:06:46
UweD
Hallo
So?
Ich denke, es wurde das falsche Blatt verwendet
Speichern reicht 1x am Schluss
Sub Drucken_fortlaufend()
' Drucken_fortlaufend Makro
' Ein Makro, welches bei jedem starten, eine Rechnung druckt und die lfd Nummer um 1 erhöht
' Tastenkombination: Strg+y
Dim Zeile As Double
Const Spalte As Integer = 1 'Soll in Spalte A nachsehen
Zeile = 1 'Startwert
With Worksheets("Gesamt Einnahmen2015")
Do While .Cells(Zeile, Spalte)  "" 'solange in der Zelle was steht ausführen
Application.Goto Reference:="Drucken_fortlaufend"
ActiveWindow.SelectedSheets.PrintOut 'Druckt den angegebenen Druckbereich
.Range("H18") = .Range("H18") + 1 ' H18 abändern
Zeile = Zeile + 1
Loop
End With
ActiveWorkbook.Save
End Sub
Gruß UweD

Anzeige
AW: VBA per Schleife wiederholen bis leere Zelle
09.06.2015 11:31:02
Björn
Es wird mir langsam unangenehm, ständig weiter zu fragen. :-(
Das Blatt hatte ich vorher auch geändert.
Der jetzige Versuch sieht druckt ebenfalls nur 2 Ausdrucke. Ohne Fehlermeldung, hört er auf.
Vielen Dank für Deine/Eure Geduld, mit so einem wie mich.
Gruß Björn

Anzeige
AW: VBA per Schleife wiederholen bis leere Zelle
09.06.2015 14:48:38
UweD
Hallo
Dann wirst du wohl mal eine (anonymisierte) Musterdatei hochladen müssen.
Gruß UweD

AW: VBA per Schleife wiederholen bis leere Zelle
09.06.2015 15:26:41
Björn
Das mache ich doch glatt.
Ich habe einfach mal ein paar nichtssagende Daten drin, aber ich denke, dass es hier ersichtlich wird, wonach ich suche.
Tolles Forum hier!!!
Vielen Dank
Hier der Link
https://www.herber.de/bbs/user/98106.xls

Anzeige
AW: VBA per Schleife wiederholen bis leere Zelle
09.06.2015 16:05:49
UweD
Hallo
Du arbeitest mit 2 unterschiedlichen TabellenBlättern.
Die müssen einzeln angesprochen werden.
Warum nur 2x gedruckt wurde, liegt an den Überschriften, bzw. den Leerzellen darunter.
Deine "Daten" fangen erst ab Zeile 5 an.

Gesamt Einnahmen2015
 ABC
1123
2lfd Nr.DatumArtikel
3   
4   
5102.01.2015Test Artikel 1
6205.01.2015Test Artikel 2
7301.02.2015Test Artikel 3
http://excel-inn.de/dateien/vba_beispiele/tabellenanzeige_in_html_addin.zip
http://Hajo-Excel.de/tools.htm
XHTML-Tabelle zur Darstellung in Foren, einschl. der neuen Funktionen ab Version 2007
Add-In-Version 19.03 einschl. 64 Bit


Ich hab das Makro so abgeändert.
Sub Drucken_fortlaufend()
' Drucken_fortlaufend Makro
' Ein Makro, welches bei jedem starten, eine Rechnung druckt und die lfd Nummer um 1 erhöht
' Tastenkombination: Strg+y
Dim TB1, TB2
Dim Zeile As Double
Const StartZeile As Single = 5 'Startwert, Wegen der Überschriften
Const Spalte As Integer = 1 'Soll in Spalte A nachsehen
Set TB1 = Sheets("Gesamt Einnahmen2015")
Set TB2 = Sheets("Rechnung 2015")
Zeile = TB2.Range("J7") + StartZeile - 1
Do While TB1.Cells(Zeile, Spalte)  "" 'solange in der Zelle was steht ausführen
'Application.Goto Reference:="Drucken_fortlaufend"
TB2.PrintOut 'Druckt den angegebenen Druckbereich
TB2.Range("J7") = TB2.Range("J7") + 1 ' J7 abändern
Zeile = Zeile + 1
Loop
ActiveWorkbook.Save
End Sub

Meiner Meinung nach brauchst du die Zeile "Application.Goto Reference:="Drucken_fortlaufend"" nicht
Gruß UweD

Anzeige
AW: VBA per Schleife wiederholen bis leere Zelle
10.06.2015 07:10:27
Björn
Wahnsinn!!!
Vielen Lieben Dank. Du hast mir sehr geholfen!!!
Das würde ich auch gern mal verstehen und umsetzen können!
Danke schön Gruß Björn
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA Schleife bis leere Zelle: So funktioniert's


Schritt-für-Schritt-Anleitung

Um eine VBA Schleife zu erstellen, die so lange läuft, bis eine leere Zelle erreicht wird, kannst du folgendes Beispiel verwenden. Dies ist besonders nützlich, wenn du Daten drucken möchtest, bis in einer bestimmten Spalte eine leere Zelle gefunden wird.

  1. Öffne dein Excel-Dokument und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul ein, indem du im Menü auf Einfügen > Modul klickst.
  3. Kopiere den folgenden Code in das Modul:
Sub Drucken_fortlaufend()
    ' Ein Makro, das Rechnungen druckt, solange in einer bestimmten Zelle ein Wert vorhanden ist.
    Dim Zeile As Long
    Const StartZeile As Long = 5 ' Starte ab Zeile 5, um Überschriften zu überspringen
    Const Spalte As Integer = 1 ' Überprüfe die erste Spalte

    Zeile = StartZeile

    Do While Worksheets("Gesamt Einnahmen2015").Cells(Zeile, Spalte) <> "" ' Solange Zelle nicht leer
        Worksheets("Rechnung 2015").PrintOut ' Drucke den angegebenen Bereich
        Worksheets("Gesamt Einnahmen2015").Cells(Zeile, 1).Value = Worksheets("Gesamt Einnahmen2015").Cells(Zeile, 1).Value + 1 ' Erhöhe den Wert in der Zelle
        Zeile = Zeile + 1 ' Gehe zur nächsten Zeile
    Loop

    ActiveWorkbook.Save ' Speichere das Workbook
End Sub
  1. Schließe den VBA-Editor und führe das Makro aus, indem du ALT + F8 drückst und das Makro Drucken_fortlaufend auswählst.

Häufige Fehler und Lösungen

  1. Laufzeitfehler 1004: Dieser Fehler tritt häufig auf, wenn die Referenz auf das Arbeitsblatt oder die Zelle nicht korrekt ist. Stelle sicher, dass der Arbeitsblattname genau übereinstimmt.
  2. Druckvorgang stoppt nach 2 Ausdrucken: Dies kann passieren, wenn Leerzeilen oder Überschriften in der Datenreihe vorhanden sind. Überprüfe, ob deine Daten in der richtigen Zeile beginnen.
  3. Schleife läuft unendlich: Wenn du die Zeile nicht korrekt erhöhst, kann dies zu einer Endlosschleife führen. Achte darauf, dass Zeile = Zeile + 1 korrekt positioniert ist.

Alternative Methoden

Wenn du nicht mit VBA arbeiten möchtest, kannst du auch eine Excel-Formel verwenden, um Werte bis zu einer leeren Zelle zu summieren oder zu zählen. Dazu nutzt du die WENN-Funktion in Kombination mit VERGLEICH oder INDEX. Diese Methode ist jedoch weniger flexibel als eine VBA Schleife.


Praktische Beispiele

Hier ist ein einfaches Beispiel, wie du eine VBA Schleife nutzen kannst, um Daten in einer Spalte zu durchlaufen:

Sub Beispiel_Schleife()
    Dim Zeile As Long
    Zeile = 1 ' Starte in Zeile 1

    Do While Cells(Zeile, 1) <> "" ' Solange Zelle nicht leer
        Debug.Print Cells(Zeile, 1).Value ' Gibt den Wert in der Konsole aus
        Zeile = Zeile + 1 ' Gehe zur nächsten Zeile
    Loop
End Sub

Tipps für Profis

  • Verwende Option Explicit am Anfang deines Moduls, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft, Fehler zu vermeiden.
  • Nutze Application.ScreenUpdating = False, um das Flackern des Bildschirms während des Druckens zu reduzieren.
  • Teste deine VBA Schleife immer mit einer kleinen Datenmenge, bevor du sie auf große Datenmengen anwendest.

FAQ: Häufige Fragen

1. Wie kann ich die Schleife anpassen, um nur bestimmte Werte zu drucken? Du kannst eine Bedingung innerhalb der Schleife hinzufügen, die überprüft, ob der Wert in der Zelle einem bestimmten Kriterium entspricht, bevor gedruckt wird.

2. Was mache ich, wenn ich eine while Schleife statt einer do while Schleife verwenden möchte? Du kannst den Code einfach anpassen. Eine While Schleife wird wie folgt aussehen:

While Worksheets("Gesamt Einnahmen2015").Cells(Zeile, Spalte) <> ""
    ' Druck- und Erhöhungslogik hier
Wend

Nutze diese Anleitung, um erfolgreich eine VBA Schleife bis leere Zelle zu implementieren und deine Daten effizient zu verarbeiten.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige