Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1336to1340
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

Immer gerade Seitenzahl drucken

Immer gerade Seitenzahl drucken
28.10.2013 09:11:43
Sebastian
Hallo liebe User,
ich komme mit meinem Makro leider nicht weiter.
Mein Makro soll die Seitenzahl prüfen und wenn diese ungerade ist, einen Seitenumbruch am Ende einfügen. Aus dieser Datei wird ein PDF gedruck und daraus dann per Dublex auf Papier gedruckt. Mein Makro ist teils selbst geschrieben, teils zusammen Kopiert (Ist nicht perfekt, aber es klappt). Für ein einzelnes Tabellenblatt funktioniert es auch super. Will ich es aber auf alle Tabellenblätter ein mal anwenden, klapt es nicht mehr. Ich bekomme immer eine Fehlermeldung für diese Zeiele:
d = Range(ActiveSheet.PageSetup.PrintArea).Cells(Range(ActiveSheet.PageSetup.PrintArea).Cells.Count).Column
(Ermitteln der alten Spaltenbreite, da diese beibehalten warden soll; Ist Variabel)
Hier mein Makro:

Public Sub DuplexDrucken()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Sheets
ws.active
Dim nHBreaks As Integer
Dim nVBreaks As Integer
Dim nHPages As Integer
Dim nVPages As Integer
Dim nPagesTot As Integer
Dim Zelle As Range
Dim Spalte As Integer
'--------------------------------------------Seiten Zählen
If TypeName(ActiveWorkbook.ActiveSheet) = "Worksheet" Then
With ActiveWorkbook.ActiveSheet
nHBreaks = .HPageBreaks.Count
nHPages = nHBreaks + 1
nVBreaks = .VPageBreaks.Count
nVPages = nVBreaks + 1
nPagesTot = nHPages * nVPages
End With
'---------------------------------------------Gerade oder Ungerade
If nPagesTot Mod 2  0 Then
For Each Zelle In ActiveSheet.Range("A1:A1000").Cells 'Nach ,., suchen
If Zelle.Text = ",.," Then ',., Steht auf jedem TB ganz unten
Zelle.Activate
ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell ' Seitenumbruch   _
_
_
_
_
einfügen
Exit For
End If
Next
Spalte = ActiveCell.Row
d = Range(ActiveSheet.PageSetup.PrintArea).Cells(Range(ActiveSheet. _
PageSetup.PrintArea).Cells.Count).Column
Bereich = Cells(Spalte, d).Address(RowAbsolute:=False, ColumnAbsolute:=False)
ActiveSheet.PageSetup.PrintArea = "$A$1:" & Bereich
Range("A1").Select
Else
End If
Else
MsgBox "Das aktive Blatt ist kein Tabellenblatt!", _
vbOKOnly + vbInformation
End If
Next  ws
End Sub

Wer kann mir bitte weiterhelfen.
Vielen Dank
Liebe Grüße Sebatian

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Immer gerade Seitenzahl drucken
29.10.2013 07:30:15
fcs
Hallo Sebastian,
mit den folgenden Anpassungen sollte es funktionieren.
Allerdings kam bei mir schon in Zeile
ws.Active
die erste Fehlermeldung.
Außerdem solltest du bei der Verwendung von Variablennamen nicht zu viel Kreativität entwickeln.
Die Variable "Spalte" für eine Zeilennummer zu verwenden ist schon etwas verwirrend.
mfg
Franz
Public Sub DuplexDrucken()
Dim ws As Worksheet
Dim d As Variant                                  'neu
Dim Bereich As Variant                            'neu
For Each ws In ThisWorkbook.Sheets
ws.Activate                                       'Korrektur
Dim nHBreaks As Integer
Dim nVBreaks As Integer
Dim nHPages As Integer
Dim nVPages As Integer
Dim nPagesTot As Integer
Dim Zelle As Range
Dim Spalte As Integer
'--------------------------------------------Seiten Zählen
If TypeName(ActiveWorkbook.ActiveSheet) = "Worksheet" Then
With ActiveWorkbook.ActiveSheet
nHBreaks = .HPageBreaks.Count
nHPages = nHBreaks + 1
nVBreaks = .VPageBreaks.Count
nVPages = nVBreaks + 1
nPagesTot = nHPages * nVPages
End With
'---------------------------------------------Gerade oder Ungerade
If nPagesTot Mod 2  0 Then
For Each Zelle In ActiveSheet.Range("A1:A1000").Cells 'Nach ,., suchen
If Zelle.Text = ",.," Then ',., Steht auf jedem TB ganz unten
Zelle.Activate
ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell ' Seitenumbruch _
einfügen
Exit For
End If
Next
Spalte = ActiveCell.Row
With Range(ActiveSheet.PageSetup.PrintArea)     'Anpassung
d = .Column + .Columns.Count - 1              'Anpassung
End With                                        'Anpassung
Bereich = Cells(Spalte, d).Address(RowAbsolute:=False, ColumnAbsolute:=False)
ActiveSheet.PageSetup.PrintArea = "$A$1:" & Bereich
Range("A1").Select
Else
End If
Else
MsgBox "Das aktive Blatt ist kein Tabellenblatt!", _
vbOKOnly + vbInformation
End If
Next ws
End Sub

Anzeige
AW: Immer gerade Seitenzahl drucken
30.10.2013 14:03:11
Sebastian
Hallo Franz,
erstmals vielen Dank, fürs durchlesen und überarbeiten.
Ja, ich gestehe, meine Variablennamen sind schon sehr kreativ und manchmal unlogisch ?
Ich habe deine Anpassung getestet, aber leider kommt wieder die gleiche Fehlermeldung: an dieser stelle
Sub Test
With Range(ActiveSheet.PageSetup.PrintArea)     'Anpassung
End Sub
Ich denke VBA hat, in diesem Zusammenhang, ein Problem mit "ActiveSheet."
Gruß Sebastian

AW: Immer gerade Seitenzahl drucken
30.10.2013 14:05:15
Sebastian
Habe vergessen das "Thread noch offen" Häkchen zu setzen.

AW: Immer gerade Seitenzahl drucken
30.10.2013 15:55:42
fcs
Hallo Sebastian,
das Problem ist dann wahrscheinlich der Speicherort deines Makros.
Wenn das Makro unter einem Tabellenblatt-Modul angelegt ist, dann muss vor jedem "Range" oder "Cells" ein "Activesheet." oder aber "ws." eingefügt werden, da Excel in einem Tabellenblatt-Modul bei "Range" und "Cells" automatisch zum zugehörigen Tabellenblatt referenziert, wenn das Tabellenblatt-Objekt nicht mit angegeben ist.
Der einfachere Weg:
Du verschiebst dein Makro komplett in eine allgemeines Modul der Datei. Dann beziehen sich "Range" und "Cells" immer auf das aktive Blatt, wenn das zugehörige Tabellenblatt-Objekt nicht mit angegeben ist.
mfg
Franz
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige