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

Zu viele Seiten beim Drucken

Zu viele Seiten beim Drucken
03.08.2016 14:42:27
Fingayn
Hallo Leute,
Ich habe ein Problem...
Ich habe mir (unter anderem mit der Hilfe vieler toller Beiträge aus diesem Forum) einen Code gebastelt. Er formatiert eine Excel-Tabelle um und legt Druckbereich und -layout fest. Soweit funktioniert auch alles ganz gut, nur wenn ich dann drucken will, sagt er mir es wären 117 Seiten, wobei 115 leer sind...
Kann mir jemand helfen, diese Seiten loszuwerden?
Hier mein Code:
Sub Exportdatei_Formatieren()
'Fragen verhindern, Bildschirmakualisierung aus
Application.DisplayAlerts = False
Application.ScreenUpdating = False
'Umbenennen und Speichern
Worksheets("Deckblatt").Activate
Range("D2").Select
ActiveCell.FormulaR1C1 = _
"=CONCATENATE(RC[-2],""_"",R[2]C[-2],"" "",R[3]C[-2],"" "",R[1]C[-2],"".xlsx"")"
Dim strPfad As String
Dim DatNam As String
DatNam = Range("D2")
strPfad = Environ("UserProfile") & "\Documents\"
ActiveWorkbook.SaveAs Filename:=strPfad & DatNam, FileFormat _
:=xlOpenXMLWorkbook, Password:="", WriteResPassword:="", ReadOnlyRecommended:= _
False, CreateBackup:=False
Worksheets("Ausstattung TGM").Activate
'überflüssige Tabellenblätter Löschen
Worksheets("Tabelle1").Delete
Worksheets("Tabelle2").Delete
Worksheets("Tabelle3").Delete
Worksheets("Mängelliste").Delete
Worksheets("Ausstattung IGM").Delete
'Überschriften und Inhalt Anpassen
Range("Z1").Value = "Bemerkungen"
Dim RaBereich As Range, RaZelle As Range
Set RaBereich = Range("A:A")
Set RaBereich = Intersect(RaBereich, Range("A:A"))
If Not RaBereich Is Nothing Then
For Each RaZelle In RaBereich
RaZelle = Left(RaZelle.Value, 10)
RaZelle = Right(RaZelle.Value, 2)
Next RaZelle
End If
Set RaBereich = Nothing
Dim i As Integer
For i = 1 To 10000
Select Case Cells(i, 1)
Case "1"
Cells(i, 1).Value = "01 - " & Worksheets("Deckblatt").Range("A10")
Case "2"
Cells(i, 1).Value = "02 - " & Worksheets("Deckblatt").Range("A11")
Case "3"
Cells(i, 1).Value = "03 - " & Worksheets("Deckblatt").Range("A12")
Case "4"
Cells(i, 1).Value = "04 - " & Worksheets("Deckblatt").Range("A13")
Case "5"
Cells(i, 1).Value = "05 - " & Worksheets("Deckblatt").Range("A14")
Case "6"
Cells(i, 1).Value = "06 - " & Worksheets("Deckblatt").Range("A15")
Case "7"
Cells(i, 1).Value = "07 - " & Worksheets("Deckblatt").Range("A16")
Case "8"
Cells(i, 1).Value = "08 - " & Worksheets("Deckblatt").Range("A17")
Case "9"
Cells(i, 1).Value = "09 - " & Worksheets("Deckblatt").Range("A18")
Case "10"
Cells(i, 1).Value = "10 - " & Worksheets("Deckblatt").Range("A19")
End Select
Next i
Range("A1").Value = "Gebäudeteil"
'Spalten auswählen und löschen
Set Bereich = Union(Columns(2), Columns(3), Columns(8), Columns(13), Columns(22), Columns(23),   _
_
_
_
_
Columns(24), Columns(25))
Bereich.Delete
'Schriftart etc.
Cells.Select
With Selection.Font
.Name = "Arial"
.Size = 10
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = 1
.TintAndShade = 0
.ThemeFont = xlThemeFontNone
End With
'Zeilen einfärben
Dim z As Integer, farbe As Integer
For z = 1 To 10000
Select Case Cells(z, 6)
Case "0"
farbe = 15
Case Else
farbe = xlNone
End Select
With Rows(z)
.Interior.ColorIndex = farbe
End With
With Cells(z, 6)
.Font.ColorIndex = farbe
End With
With Cells(z, 7)
.Font.ColorIndex = farbe
End With
Next z
Dim x As Integer, Schriftfarbe As Integer
For x = 1 To 10000
Select Case Cells(x, 6)
Case "0"
Schriftfarbe = xlNone
Case Else
Schriftfarbe = 2
End Select
With Cells(x, 5)
.Font.ColorIndex = Schriftfarbe
End With
Next x
'Tabelle_erstellen
Dim objSheet As Worksheet
Set objSheet = ActiveSheet
Dim actRange As Range
Set actRange = objSheet.UsedRange
With objSheet
.ListObjects.Add(xlSrcRange, actRange, , xlYes).Name = "Ausstattung TGM"
.ListObjects("Ausstattung TGM").TableStyle = ""
End With
'Drucklayout festlegen
Cells.EntireColumn.AutoFit
Application.PrintCommunication = False
With ActiveSheet.PageSetup
.PrintArea = "A:Q"
.PrintTitleRows = "$1:$1"
.CenterHeader = Worksheets("Deckblatt").Range("D2") & vbLf & "Ausstattung TGM"
.PrintQuality = 600
.Orientation = xlLandscape
.PaperSize = xlPaperA3
.FitToPagesWide = 1
End With
Application.PrintCommunication = True
'letztes überflüssiges Tabellenblatt löschen
Worksheets("Deckblatt").Delete
'Löschen aller unnötigen Zellen
Dim intRow As Integer, intLastRow As Integer
intLastRow = Cells.SpecialCells(xlCellTypeLastCell).Row
For intRow = intLastRow To 1 Step -1
If Application.CountA(Rows(intRow)) = 0 Then
intLastRow = intLastRow - 1
Else
Exit For
End If
Next intRow
For intRow = intLastRow To 1 Step -1
If IsEmpty(Cells(intRow, 1)) Then
Rows(intRow).Delete
End If
Next intRow
'Speichern
Range("A1").Select
ActiveWorkbook.Save
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub

Danke schonmal vielmals für die Hilfe:-)
LG Lars
*Ps: bitte nicht an meinem Programmierstil meckern, ich fange grade an VBA zu lernen;-)

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

Betreff
Datum
Anwender
Anzeige
AW: Zu viele Seiten beim Drucken
03.08.2016 16:43:44
Hajo_Zi
Hallo Lars,
Prüfe mal Strg+Emde, dann siehst Du das Ende der Tabelle. Leere Zeile und Spalten sollten gelöscht werden. Ich mache immer 1 mehr zu Strg+Ende. Speichern nicht vergessen.

AW: Zu viele Seiten beim Drucken
04.08.2016 08:37:26
Fingayn
Hallo Hajo,
Danke für den Tipp.
Wie ich schon so halb vermutet hatte zeigt er mir dann die Zeile 10000 an. Ich denke das liegt _ daran, dass mein

For i = 1 to 10000
immer bis dahin läuft, oder? Wie bekomme ich das hin, dass der da dann immer nur bis zur letzten Zeile geht? Die kann leider immer stark variieren, weswegen ich einfach bis 10000 hab durchlaufen lassen... Oder ist es einfacher, immer bis zur letzten Zeile zu löschen?
LG Lars
Anzeige
AW: Zu viele Seiten beim Drucken
04.08.2016 17:41:04
Hajo_Zi
Hallo Lars,
für Spalte A
LoLetzte = IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count)

AW: Zu viele Seiten beim Drucken
05.08.2016 08:41:22
Fingayn
Danke auch:-) habs auch mal ausprobiert; klappt bestens^^
AW: zuviele Seiten beim Drucken - warum
04.08.2016 09:40:55
Daniel
Hi Lars
deinen riesen Druckbereich erzeugst du dir im Codeteil "Zeilen einfärben", in dem du jeder der Zellen ein individuelles Format gibst.
Zellen mit eigenständiger Formatierung gehören immer zum genutzen Zellbereich, auch wenn sie keinen Wert enthalten und werden daher mit ausgedruckt.
du solltest generell deine Bearbeitungsschleifen nicht bis zu einem festen Wert laufen lassen, sondern immer nur bis zu letzten benutzen Zeile in der bearbeiteten Spalte.
 For z = 1 To Cells(Rows.count, 6).end(xlup).Row

du solltest hier aber nicht jede Zelle einzeln einfärben, sondern für den ganzen Zellbereich eine entsprechende Bedingte Formatierung einrichten.
Das ist für Excel günstiger, weil dann alle Zellen die gleiche Formatierung haben.
Je öfters du das Format wechselt, um so mehr Speicherplatz braucht Excel.
Was mir noch so auffällt:
diesen Codeteil hier:
For i = 1 To 10000
Select Case Cells(i, 1)
Case "1"
Cells(i, 1).Value = "01 - " & Worksheets("Deckblatt").Range("A10")
Case "2"
Cells(i, 1).Value = "02 - " & Worksheets("Deckblatt").Range("A11")
Case "3"
Cells(i, 1).Value = "03 - " & Worksheets("Deckblatt").Range("A12")
Case "4"
Cells(i, 1).Value = "04 - " & Worksheets("Deckblatt").Range("A13")
Case "5"
Cells(i, 1).Value = "05 - " & Worksheets("Deckblatt").Range("A14")
Case "6"
Cells(i, 1).Value = "06 - " & Worksheets("Deckblatt").Range("A15")
Case "7"
Cells(i, 1).Value = "07 - " & Worksheets("Deckblatt").Range("A16")
Case "8"
Cells(i, 1).Value = "08 - " & Worksheets("Deckblatt").Range("A17")
Case "9"
Cells(i, 1).Value = "09 - " & Worksheets("Deckblatt").Range("A18")
Case "10"
Cells(i, 1).Value = "10 - " & Worksheets("Deckblatt").Range("A19")
End Select
Next i
kannst du aufgrund seiner Regelmäßigkeit wesentlich einfacher programmieren:
for i = 1 to 10
Columns(1).Replace i, Format(i, "00") & " - " & Worksheets("Deckblatt").Cells(i + 9, 1),  _
xlwhole
Next
Gruß Daniel
Anzeige
AW: zuviele Seiten beim Drucken - warum
04.08.2016 11:56:23
Fingayn
Hallo Daniel,
DANKEEEEE!!! Das war genau das was ich brauchte! Es klappt perfekt!
Der Tip mit dem verkürzen funtzt auch bestens.^^
Kannst du mir vielleicht noch sagen woran das liegt, dass der Code knapp zwei Minuten zum durchlaufen braucht?;-)
LG Lars
AW: zuviele Seiten beim Drucken - warum
04.08.2016 12:20:55
Daniel
Hi
wahrscheinlich weil die Datei sehr lang ist und das löschen von Zeilen einzeln per Schleife sehr lange dauert.
eine schneller Methode zum Löschen von Zeilen mit Bedingung habe ich hier beschrieben.
https://www.herber.de/forum/messages/1507628.html
Gruß Daniel
Anzeige
AW: zuviele Seiten beim Drucken - warum
04.08.2016 12:54:27
Fingayn
Danke!:-)

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige