[Excel] Nur Zeilen Drucken wo Wert nicht 0

nchristoph

Erfahrenes Mitglied
Hallo Zusammen,

ich versuche bei meinem Angebotsprogramm eine Möglichkeit einzubauen, damit nur Zeilen gedruckt werden, wo ein Wert hinterlegt ist.

Im Anhang ist mein Programm damit Ihr euch das besser vorstellen könnt.

Im Reiter Megawood ist die Eingabemaske über 2 Seiten und es wird immer alles angedruckt.

Um Toner und Papier zu sparen möchte ich jetzt, das nur die Zeilen angedruckt werden, wo hinten bei der Zeilensumme ein Wert ist.

Ich habe schon bei Google gesucht, auch ein paar Hinweise gefunden, allerdings war keiner der Versuche von Erfolg gekrönt.

Auch wenn es ein widerspruch ist: Es soll immer ein DinA4 Blatt sein und eine weisse kleine und eine Graue grosse Zeile sein.

Folgende Probleme sind bei meinen Versuchen aufgetreten:

Die weissen Leerzeilen werden gar nicht angedruckt.
oder
das Formular ist verschoben.
oder
bei nur einer Seite werden keineGrau/Weissen leerzeilen zum auffüllen auf eine Dina4 Seite eingefügt.

Kann mir eventuell wer nen Tip geben? Geht das überhaupt?

Verwendet werden Excel 2007+ und win7 64bit
 
Ok, auch ohne Anhang ein Vorschlag wie du es lösen könntest.

Visual Basic:
Sub Drucken()

Dim letzte As Integer, aktuell As Integer

letzte = Cells(Rows.Count, 1).End(xlUp).Row

For aktuell = 1 To letzte
Debug.Print Cells(aktuell, 1).Value
    If IsEmpty(Cells(aktuell, 1)) Or Cells(aktuell, 1).Value = 0 Then
        Rows(aktuell).Hidden = True
    End If
Next aktuell

ActiveSheet.PrintPreview
Rows.Hidden = False

End Sub

Im Beispiel wird geprüft ob in Spalte A der Wert 0 oder eben gar nichts steht. In diesem Fall wird die entsprechende Zeile ausgeblendet, dann die Druckvorschau angezeigt und zum Schluss werden alle Zeilen wieder sichtbar.
 
Hm anscheinend hat er mir den nicht hochgeladen. Habe die Datei nochmal hochgeladen.

Danke Tombe, ich werd deinen Code mal probieren.
 
Zuletzt bearbeitet:
Hab den Code von tombe nicht ausprobiert, aber generell würde ich solche Schleifen, in welchem man die aktuelle Zeile in irgendeiner Weise verändert, immer rückwärts laufen lassen.

Ich habs mir einfach zur Angewohnheit gemacht, solche Dinger immer rückwärts laufen zu lassen, da ich in der Firma, wo ich arbeite, sehr häufig Tabellenblätter mit mehreren tausend Zeilen habe, in denen ich Duplikate löschen bzw. Werte in dieser Zeile zusammenkonsolidieren muss, und da ist es eben rückwärts viel einfacher, da man den Listcount nicht im Auge behalten muss, da ich ja immer nur eine Zeile bearbeite, welche ich ja bereits gezählt habe
 
@Zvoni:
Habe gerade was gegessen, deshalb ist das ganze Blut aus dem Gehirn in den Bauch gewandert. Wie würde bei die dann die "Rückwärts-Schleife" aussehen?
Die letzte verwendete Zeile müsstest du doch auch ermitteln und was wäre dann der Vorteil es rückwärts laufen zu lassen?

@nchristoph:
Habe es eben in deiner Datei getestet. Da das Blatt zumindest teilweise geschützt ist, kannst du die Zeilen nicht einfach ausblenden. Du musst vorher den Schutz aufheben, dann klappt es.

Ich habe zum Testen auch Cells(aktuell, 9) in Range("I", aktuell) geändert. Macht irgendwie deutlicher um welche Spalte es geht.
 
Ich glaube dein Blut ist aber immer noch nicht im Hirn angekommen :)
Die letzte verwendete Zeile müsstest du doch auch ermitteln und was wäre dann der Vorteil es rückwärts laufen zu lassen?

Auszug aus tombes code
Visual Basic:
letzte = Cells(Rows.Count, 1).End(xlUp).Row

Visual Basic:
For aktuell=Letzte To 2 Step-1
Oder halt die erste Zeile ab wo es eigentlich losgeht. Sollte ja der OP wissen, ansonsten Fehlerbehandlung einbauen....
 
Sorry für die späte Antwort aber ich hab, wie bereits in nem anderen Thread erwähnt, momentan zuhause kein Internet.

Es geht um die Zellen R13 - R93, will zumindest mein Chef. Meiner Meinung nach wäre es aber wichtiger zu Prüfen, ob entweder von B13 - B93 ein Wert steht bzw. von I13 - I93.

Ich habe jetzt den Code von tombe mal eingebaut. Funktioniert auch so weit so gut, allerdings setzt der alle Zeilen, wo kein Wert drinnensteht auf hidden, also auch die Leerzeilen zum Formatieren des Layouts.
 
Visual Basic:
Dim von As Integer

For von = 13 To 93
    If ActiveSheet.Range("I" & von).Value = 0 Then
        Rows(von).Hidden = True
    End If
Next von

Jetzt werden nur die Zeilen 13 bis 93 durchsucht und geprüft ob in Spalte I der Wert 0 steht, nur diese Zeilen werden ausgeblendet. Zeilen in denen die Spalte I keinen Wert (leer) oder einen Wert ungleich 0 hat, bleiben sichtbar.
 
Danke Tombe, das bringt mich schon ein gutes Stück weiter.

Ist zwar noch nicht 100% das, was ich suche, aber schon ein gutes Stück davon.

Den Rest werd ich selber versuchen zu finden.
 
Zurück