MS-Office-Forum

Zurück   MS-Office-Forum > Microsoft Office > Microsoft Excel
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads
Themen-Optionen Ansicht
Alt 26.04.2018, 16:48   #1
CStein
Neuer Benutzer
Neuer Benutzer
Standard VBA - Dynamischer Druckbereich pro Sheet

Meine Ausgangssituation (Datei siehe Anhang): 100, nach Firmennamen benannte Kunden-Sheets (orange) mit gleicher Spaltenzahl, aber verschiedener Zeilenanzahl in einer Kundenabrechnungsdatei. Diese Kunden-Sheets haben wegen verschiedener Berechnungen jeweils Formeln bis Zeile 1000, die sich ihre Werte aus einem jeweiligen Hilfs-Sheet (weiß) pro Kunde holen.

Mein Anliegen: Erzeugung und Benennung eines PDFs pro Kunden-Sheet mittels VBA, wozu Makro schon vorhanden ist:

Sub PDF_Export()
Dim lsheet As Integer
For lsheet = 1 To ActiveWorkbook.Worksheets.Count
With Worksheets(lsheet)
If Not IsEmpty(.UsedRange) Then
.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=.Name & ".pdf", _
Quality:=xlQualityStandard
End If
End With
Next lsheet
End Sub

(Makro erzeugt PDFs für alle Sheets; jene der Hilfs-Sheets werfe ich dann weg...)


Mein Problem: Falls es z.B. ab Zeile 500 (variiert) im jeweiligen Hilfs-Sheet keine Werte mehr gibt, wird mit Hilfe einer Formel in Kunden-Sheet "" (d.h. leer) ausgegeben. Da diese Zellen zwar leer erscheinen, aber es aus Excel-Sicht wegen der Formel nicht sind, werden zahllose weiße PDF-Seiten erzeugt, die nicht benötigt werden.

Meine Frage:
Gibt es eine Möglichkeit den Druckbereich pro Kunden-Sheet (!) automatisch in seiner Länge anzupassen, z.B. über eine Angabe in Zelle A1, die die Anzahl der Datensätze enthält ? Oder könnte man obiges Makro so anpassen, dass nur noch nicht-weisse Zeilen gedruckt werden ?

Besten Dank für Eure Hilfe.
Angehängte Dateien
Dateityp: xlsm Kundenabrechnung-2.xlsm (23,3 KB, 1x aufgerufen)
CStein ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 26.04.2018, 16:50   #2
Hajo_Zi
MOF Guru
MOF Guru
Standard

schaue Dir mal das an
http://hajo-excel.de/gepackt/vba/druckbereich.zip

GrußformelHomepage

__________________

Signatur in jedem Beitrag
m Forum kann der Beitrag als erledigt markiert werden. Also mache es unten links mit Klick auf den Schalter "als erledigt setzen", falls Problem gelöst.
Der Zustand des Beitrages wird dann in der Übersicht angezeigt und man braucht sich diese Beiträge nicht mehr ansehen.
Bitte Version angeben. Bei keiner Angabe gehe ich von meinen Angaben aus.
Betriebssystem: Windows 10 - 64 Bit, Office 2016 - 32 Bit.
Hajo_Zi ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 27.04.2018, 10:57   #3
CStein
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Vielen Dank,

das kommt dem Ziel schon ziemlich nahe; jetzt müsste der Makro den Druckbereich nur noch für mehrere Sheets individuell optimieren können.

Ich habe mal versucht, den zentralen Teil des Makro im obigen Link-Anhang mit einer Schleife (rot, aus einem anderen Makro) zur Bearbeitung aller Sheets zu umgeben, aber es hat nicht ganz geklappt...


Sub Drucken1()
Dim LoI As Long
Dim LoLetzte As Long
Dim oWs As Worksheet

On Error Resume Next
For Each oWs In ActiveWorkbook.Worksheets

With ActiveWorkbook


LoLetzte = IIf(IsEmpty(Cells(Rows.Count, 9)), _
Cells(Rows.Count, 9).End(xlUp).Row, Rows.Count)

For LoI = LoLetzte To 2 Step -1
If Cells(LoI, 9) <> Empty Then Exit For
Next LoI

ActiveSheet.PageSetup.PrintArea = "$A$1:$I$" & LoI

End With
Next oWs

End Sub


Vermutlich ist da nur eine Winzigkeit falsch, die ich nicht erkenne. Wäre toll wenn mir jemand da weiterhelfen könnte.

Besten Dank !
CStein ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 27.04.2018, 13:26   #4
Hajo_Zi
MOF Guru
MOF Guru
Standard

warum
With ActiveWorkbook
und nicht
With oWs?
Warum fehlen der Punkt vor Cells?
Warum
ActiveSheet.PageSetup.PrintArea = "$A$1:$I$" & LoI
es soll doch in Ows?

Gruß Hajo

__________________

Signatur in jedem Beitrag
m Forum kann der Beitrag als erledigt markiert werden. Also mache es unten links mit Klick auf den Schalter "als erledigt setzen", falls Problem gelöst.
Der Zustand des Beitrages wird dann in der Übersicht angezeigt und man braucht sich diese Beiträge nicht mehr ansehen.
Bitte Version angeben. Bei keiner Angabe gehe ich von meinen Angaben aus.
Betriebssystem: Windows 10 - 64 Bit, Office 2016 - 32 Bit.
Hajo_Zi ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 27.04.2018, 14:42   #5
CStein
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Danke für Deine Mühe.

Nun funktioniert es; der Punkt vor Cells scheint nicht nötig zu sein.

Hier der fertige Code (Änderungen ggü. oben in blau):

******************************************
Sub Druckbereich_optimieren()
Dim LoI As Long
Dim LoLetzte As Long
Dim oWs As Worksheet

On Error Resume Next
For Each oWs In ActiveWorkbook.Worksheets

With oWs

LoLetzte = IIf(IsEmpty(Cells(Rows.Count, 9)), _
Cells(Rows.Count, 9).End(xlUp).Row, Rows.Count)

For LoI = LoLetzte To 2 Step -1
If Cells(LoI, 9) <> Empty Then Exit For
Next LoI

oWs.PageSetup.PrintArea = "$A$1:$I$" & LoI

End With
Next oWs
End Sub

******************************************
CStein ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 27.04.2018, 14:44   #6
Hajo_Zi
MOF Guru
MOF Guru
Standard

Gut ich bin dann raus, da ich keine Ahnung von VBA habe nach Deiner Meinung.
Viel Erfolg.

Gruß Hajo

__________________

Signatur in jedem Beitrag
m Forum kann der Beitrag als erledigt markiert werden. Also mache es unten links mit Klick auf den Schalter "als erledigt setzen", falls Problem gelöst.
Der Zustand des Beitrages wird dann in der Übersicht angezeigt und man braucht sich diese Beiträge nicht mehr ansehen.
Bitte Version angeben. Bei keiner Angabe gehe ich von meinen Angaben aus.
Betriebssystem: Windows 10 - 64 Bit, Office 2016 - 32 Bit.
Hajo_Zi ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 27.04.2018, 15:04   #7
CStein
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard Punkt vor Cells

Wenn ich denn gewußt hätte vor welchem der Cells der Punkt fehlte. Da hab ich ihn halt weggelassen. Gibt mir doch mal ne Tipp wohin mit dem Punkt...

Und wieso scheint (!) es auch ohne den Punkt zu funktionieren, wenn der wichtig ist.

Meine VBA-Kenntnisse sind halt sehr gering.
CStein ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:15 Uhr.


Partner und Co.
Access-Paradies -Alles rund um die Datenbank Microsoft Access -Code -Programme-Tools -Tipps   Kostenlose Tipps & Tricks, Downloads und Programme   www.kulpa-online.com - Tipps - Tricks - Tutorials - Meinungen - Downloads uvm...   vb@rchiv · Willkommen in der Welt der VB Programmierung   Access-Garhammer - Hier finden Sie jede Menge Beispiel-Datenbanken zu Access und mehr ...   mcseboard.de   Die Top Seite für Excel-VBA-Makros uvm.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

Copyright ©2000-2018 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günter Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.