Anzeige
Archiv - Navigation
1004to1008
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

Zeilenblock ohne Seitenumbruch

Zeilenblock ohne Seitenumbruch
04.09.2008 21:42:09
bully
Hallo Exelfreunde,
ich erstelle per VBA-Code eine Abrechnung die über mehrere Seiten lang sein kann. Den Abrechnungsabschluss bilden 11 Saldierungs- und Berechnungszeilen, die ich immer zusammen auf einer Seite haben möchte. Das heisst, wenn nicht mehr alle 11 Zeilen auf der aktuellen Seite platz finden, sollen alle 11 Zeilen auf der nächsten Seite erscheinen. Also kein Zeilenumbruch nach z.B. der 5. Zeile.
Gibt es dafür eine Lösung?
Gruss bully

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeilenblock ohne Seitenumbruch
05.09.2008 11:09:00
Martin
Hallo,
im Menü "Einfügen" kannst Du unter "Seitenumbruch" den Seitenumbruch über der makierten Zelle festlegen. Gehe dazu in Spalte A, sonst wird auch ein vertikaler Seitenumbruch eingefügt!
Viele Grüße
Martin
AW: Zeilenblock ohne Seitenumbruch
05.09.2008 11:31:00
bully
Hallo Martin,
das bedeutet, dass ich auf jedem Blatt vor dem Ausdruck kontrollieren muss, ob noch ein manueller Seitenumbruch gesetzt werden muss. Genau das möchte ich mir aber ersparen.
Gruss bully
AW: Zeilenblock ohne Seitenumbruch
05.09.2008 13:26:25
fcs
Hallo Bully,
hier ein Makro, dass eine entsprechende Prüfung vor dem Drucken/der Seitenvorschau durchführt und falls erforderlich einen Seitenumbruch einfügt.
Die Spalte in der die letzte Zeile mit daten gesucht werden soll muss du ggf. anpassen.
Das Makro muss du im VBA-Editor für die Arbeitsmappe unter "DieseArbeitsmappe" einfügen.
Gruß
Franz

Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim wks As Worksheet, Zeile As Long, ZeileLast As Long
Const AnzZeilen As Long = 11 'Anzahl Zeilen, die ggf. auf letzte Seite sollen.
If ActiveSheet.Name = "Tabelle1" Then 'Name des Blattes ggf. anpassen
'ggf. vor Zusammenfassung einen Seitenwechel setzen
Set wks = ActiveSheet
With wks
'Letzet Zeile mit Daten in Spalte A ermitteln
ZeileLast = .Cells(.Rows.Count, 1).End(xlUp).Row
'ggf vorhandenen horizontalen Seitenwechsel vor Zusammenfassung löschen
.Rows(ZeileLast - AnzZeilen + 1).PageBreak = xlPageBreakNone
'Prüfen, ob vor einer der letzten 10 Zeilen ein automatischer Seitenwechsel ist
For Zeile = ZeileLast - AnzZeilen + 2 To ZeileLast
If .Rows(Zeile).PageBreak = xlPageBreakAutomatic Then
'Seitenwechsel vor Zusammenfassung setzen
.Rows(ZeileLast - AnzZeilen + 1).PageBreak = xlPageBreakManual
Exit For
End If
Next
End With
End If
End Sub


Anzeige
AW: Zeilenblock ohne Seitenumbruch
05.09.2008 16:08:00
bully
Hallo Franz,
danke für dein Code. Aus den Kommentaren kann ich lesen, dass das so ziemlich genau das ist was ich suche. Leider bringe ich den Code nicht zum funktionieren. Vermutlich liegt es am Aufbau oder der Funktion meiner Datei. Deshalb noch ein paar Details dazu:
Ich habe in Blatt3 meiner Datei eine Abrechnungsvorlage erstellt. Im Blatt2 sind sämtliche Datensätze abgespeichert. Vom Blatt1 wird das erstellen der Abrechnung gestartet. Wenn ich in Blatt1 die Kundennummer mit Adresse erfasse, werden per VBA die dazu passenden Datensätze aus Blatt2 gefiltert und in die Vorlage in Blatt3 kopiert, welches dann unter dem Namen des Kunden als neues Blatt abgespeichert wird. Soweit das Prinzip meiner Datei.
Jetzt habe ich den Code von dir in "Diese Arbeitsmappe" gespeichert. Da passiert aber nichts. Ich habe es auch probiert mit abspeichern im Blatt3, also der Vorlage. Das funktioniert auch nicht.
Da du jetzt die Funktionsweise der Datei kennst, kannst du mir vielleicht genauer sagen wo ich den Code hin koieren muss, und was noch anzupassen ist.
Gruss bully
Anzeige
AW: Zeilenblock ohne Seitenumbruch
05.09.2008 17:13:00
fcs
Hallo Bully,
dann muss die Prüfung der Blattnamen etwas anders aufgebaut werden. Die Namen der Blätter in der 1. Case-Zeile muss du entsprechend anpassen.
So wird für die neuen Kundenblätter vor dem Drucken der Seitenwechsel gesetzt.
Gruß
Franz

Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim wks As Worksheet, Zeile As Long, ZeileLast As Long
Const AnzZeilen As Long = 11 'Anzahlzeilen, die ggf. auf letzte Seite sollen.
Select Case ActiveSheet.Name
Case "Blatt1", "Blatt2", "Blatt3"
'Namen der Blätter in denen der Seitenwechsel nicht gesetzt werden soll
'do nothing
Case Else
'ggf. vor Zusammenfassung einen Seitenwechel setzen
Set wks = ActiveSheet
With wks
'Letzet Zeile mit Daten in Spalte A ermitteln
ZeileLast = .Cells(.Rows.Count, 1).End(xlUp).Row
'ggf vorhandenen horizontalen Seitenwechsel vor Zusammenfassung löschen
.Rows(ZeileLast - AnzZeilen + 1).PageBreak = xlPageBreakNone
'Prüfen, ob vor einer der letzten 10 Zeilen ein automatischer Seitenwechsel ist
For Zeile = ZeileLast - AnzZeilen + 2 To ZeileLast
If .Rows(Zeile).PageBreak = xlPageBreakAutomatic Then
'Seitenwechsel vor Zusammenfassung setzen
.Rows(ZeileLast - AnzZeilen + 1).PageBreak = xlPageBreakManual
Exit For
End If
Next
End With
End Select
End Sub


Alternative kannst auch folgendes machen:
Nach dem Ausfüllen der Vorlage bzw. vor dem Kopieren des ausgefüllten Blatts führst du das folgende Makro aus.
Auch unmitelbar nach dem Kopieren ginge, dann als Parameter verwenden: wks:=Activesheet


'Zeile zum Aufrufen der Prozedur, Name des Tabellenblatts ggf. vorher anpassen
Call Seitenwechsel(wks:=Worksheets("Vorlage"))
'Prozedur:
Sub Seitenwechsel(wks As Worksheet)
Dim Zeile As Long, ZeileLast As Long
Const AnzZeilen As Long = 11 'Anzahlzeilen, die ggf. auf letzte Seite sollen.
With wks
'Letzet Zeile mit Daten in Spalte A ermitteln
ZeileLast = .Cells(.Rows.Count, 1).End(xlUp).Row
'ggf vorhandenen horizontalen Seitenwechsel vor Zusammenfassung löschen
.Rows(ZeileLast - AnzZeilen + 1).PageBreak = xlPageBreakNone
'Prüfen, ob vor einer der letzten 10 Zeilen ein automatischer Seitenwechsel ist
For Zeile = ZeileLast - AnzZeilen + 2 To ZeileLast
If .Rows(Zeile).PageBreak = xlPageBreakAutomatic Then
'Seitenwechsel vor Zusammenfassung setzen
.Rows(ZeileLast - AnzZeilen + 1).PageBreak = xlPageBreakManual
Exit For
End If
Next
End With
End Sub


Anzeige
AW: Zeilenblock ohne Seitenumbruch
05.09.2008 18:08:25
bully
Hallo Franz,
toll es funktioniert! Sogar mit beiden Varianten. Super!!
Welche Variante ist vorzuziehen? Das heisst, ist schlanker, oder braucht weniger Recourcen? Welche würdest du wählen?
Gruss bully
AW: Zeilenblock ohne Seitenumbruch
05.09.2008 18:26:00
fcs
Hallo Bully,
wenn sich an den "fertigen" Kundenblättern nichts mehr ändert (Zeilenzahl) dann die 2. Variante. Diese ist zielgerichtet und wird nur beim Kopieren des ausgefüllten Blattes jeweils einmal ausgeführt.
Die 1. Variante braucht geringfüg mehr an Resourcen. Der Druckvorgang/Seitenvorschau der Blätter mit Kundennamen verzögert sich immer ein wenig, da vorher der Seitenumbruch neu berechnet werden muss.
Gruß
Franz
Anzeige
AW: Zeilenblock ohne Seitenumbruch
05.09.2008 19:14:04
bully
Hallo Franz,
danke für die Ausführungen. So habe ich wieder einmal mehr vieles gelernt, und eine funktionierende Lösung erhalten.
Nach dem Durchforsten des Archives, war meine Hoffnung auf eine Lösung nicht besonders gross. Dort wurden ähnliche Anfragen meistens ohne Antwort wieder geschlossen. Das zeigt mir einmal mehr: Auch bei geringen Lösungsaussichten lohnt sich eine Fragestellung im Forum.
Nochmals Danke und ein schönes Wochenende.
Gruss bully

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige