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

PDF von bestimmtem Bereich ertzeugen

PDF von bestimmtem Bereich ertzeugen
30.04.2021 11:02:32
bestimmtem
Hi zusammen,
hab durch die Hilfe hier im Forum schon eine funktionierende VBA, die mir von einem Dokument eine PDF erzeugt und eine Mail erstellt.
Jetzt kann der Bereich, aus dem eine PDF erzeugt wird aber unterschiedlich viele Zeilen beinhalten.
Hab schon mal was versucht, was aber leider nicht funktioniert. "Fehler beim Kompilieren".
Weiß jemand wo der Fehler liegt? Hier meine VBA:

Public Sub MailMitPDFundSignatur()
Dim sDateiname As String, WSh As Worksheet
Set WSh = ThisWorkbook.Sheets("ISF")
' PDF erzeugen
sDateiname = WSh.Parent.Path & "\" & " Dateiname" & Worksheets("ISF").Range("C11") & "_" & Worksheets("A 1").Range("C7").Value & ".pdf"
WSh.ExportAsFixedFormat Type:=xlTypePDF, Filename:=sDateiname, _
Quality:=xlQualityStandard, OpenAfterPublish:=False
'Die folgenden 6 Zeilen habe ich eingefügt um den Bereich einzugrenzen, der als PDF erzeugt werden soll
     max = Sheets("DQ").Range("AH3").Value
If max  2 Then max = 2
For i = 1 To max
vz = i * 51 - 50: bz = i * 51
Worksheets("GY ISF").Range ("A" & vz & ":J" & bz) '.PrintOut Copies:=1 .PrintPreview
' Mail kreieren
With CreateObject("Outlook.Application").CreateItem(0)
.GetInspector                         ' sorgt für die Signatur
'.To = "Mail Adresse"                  ' Empfänger
.Subject = "Betreff " & Worksheets("ISF").Range("C11") & "_" & Worksheets("A 1").Range("C7")     ' Betreff
.Body = "Dear Sirs," & vbCr & vbCr _
& "Text 1 " & vbCr _
& "Text 2 " & vbCr _
& "Text 3 " _
'& vbCr & .Body                  ' Mailtext mit Signatur
If Dir$(sDateiname)  "" Then .Attachments.Add sDateiname
.Display
End With
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
End Sub
Vielen Dank Vorab
Gruß Andreas

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: auf den 1. Blick: Es fehlt ein "NEXT"...
30.04.2021 11:21:47
JoWE
Hallo,
...siehe Schleife "For i = 1 To max"
Gruß
Jochen
AW: auf den 1. Blick: Es fehlt ein "NEXT"...
30.04.2021 11:35:21
Andreas
Hi Jochen,
und wo muss es hin das Next?
Egal wo ich es einbaue, dann kommt ein Laufzeitfehler =/
Gruß Andreas
AW: Bitte die Arbeitsmappe hochladen...
30.04.2021 11:47:54
JoWE
..- ohne kann ich nur raten und das liegt mir nicht
Gruß
Jochen
AW: Bitte die Arbeitsmappe hochladen...
30.04.2021 13:39:07
Andreas
Hi Jochen,
hier mal meine Datei.
https://www.herber.de/bbs/user/145878.xlsm
Mein Ziel ist eigentlich nur dass wenn im Tabellenblatt A 1 in C7 eine 1 steht soll aus dem Tabellenblatt "Tabelle1" eine PDF von Seite 1-3 erzeugt werden.
Ist die Zahl in A 1, Feld C7 eine 2, soll aus allen 4 Seiten eine PDF erzeugt werden.
Gruß Andreas
Anzeige
AW: Bitte die Arbeitsmappe hochladen...
02.05.2021 13:46:43
Jowe
hi,
Du könntest mit ActiveSheet.PagesSetup.PrintArea arbeiten. Allerdings im Code vor dieser Zeile: " ' PDF erzeugen" !!!
Das könntest Du z.B. so machen:

If Sheets("A 1").Range("C7") = 1 Then
ActiveSheet.PageSetup.PrintArea = ""
ActiveSheet.ResetAllPageBreaks
End If
If Sheets("A 1").Range("C7") = 2 Then
ActiveSheet.PageSetup.PrintArea = ""
ActiveSheet.ResetAllPageBreaks
End If
Möglicherweise musst Du mit vorhandenen Ümbrüchen
und der Skalierung noch etwas herumprobieren.
Gruß
Jochen
AW: Bitte die Arbeitsmappe hochladen...
02.05.2021 14:16:26
Jowe
sorry, so sollte es eigentlich aussehen::

If Sheets("A 1").Range("C7") = 1 Then
ActiveSheet.PageSetup.PrintArea = Range("A1:A86")
End If
If Sheets("A 1").Range("C7") = 2 Then
ActiveSheet.PageSetup.PrintArea = Range("A1:A158")
End If
Gruß
Jochen
Anzeige
AW: Bitte die Arbeitsmappe hochladen...
03.05.2021 10:04:20
Andreas
Guten Morgen Jochen,
Danke für deinen Lösungsvorschlag. Habe den Code in meine VBA eingesetzt, es wird aber trotzdem immer von allen 4 Seiten eine PDF erzeugt.
Habe ich den Code an der falschen Stelle hinterlegt?
https://www.herber.de/bbs/user/145939.xlsm

Public Sub MailMitPDFundSignatur()
Dim sDateiname As String, WSh As Worksheet
Set WSh = ThisWorkbook.Sheets("Tabelle1")
  If Sheets("A 1").Range("C7") = 1 Then
ActiveSheet.PageSetup.PrintArea = Range("A1:A141")
End If
If Sheets("A 1").Range("C7") = 2 Then
ActiveSheet.PageSetup.PrintArea = Range("A1:A159")
End If
' PDF erzeugen
sDateiname = WSh.Parent.Path & "\" & " Dateiname" & Worksheets("Tabelle1").Range("C11") & "_" & Worksheets("A 1").Range("C7").Value & ".pdf"
WSh.ExportAsFixedFormat Type:=xlTypePDF, Filename:=sDateiname, _
Quality:=xlQualityStandard, OpenAfterPublish:=False
' Mail kreieren
With CreateObject("Outlook.Application").CreateItem(0)
.GetInspector                         ' sorgt für die Signatur
'.To = "Mail Adresse"                  ' Empfänger
.Subject = "Betreff " & Worksheets("Tabelle1").Range("C11") & "_" & Worksheets("A 1").Range("C7")     ' Betreff
.Body = "Dear Sirs," & vbCr & vbCr _
& "Text 1 " & vbCr _
& "Text 2 " & vbCr _
& "Text 3 " _
'& vbCr & .Body                  ' Mailtext mit Signatur
If Dir$(sDateiname)  "" Then .Attachments.Add sDateiname
.Display
End With
End Sub

Anzeige
AW: Bitte die Arbeitsmappe hochladen...
03.05.2021 11:32:57
Jowe
dann versuch das mal so:

Public Sub MailMitPDFundSignatur()
Dim sDateiname As String, WSh As Worksheet
Set WSh = ThisWorkbook.Sheets("Tabelle1")
If Sheets("A 1").Range("C7") = 1 Then
Rows("142:157").EntireRow.Hidden = True
End If
If Sheets("A 1").Range("C7") = 2 Then
Rows("141:158").EntireRow.Hidden = False
End If
' PDF erzeugen
sDateiname = WSh.Parent.Path & "\" & " Dateiname" & Worksheets("Tabelle1").Range("C11") & "_" & Worksheets("A 1").Range("C7").Value & ".pdf"
WSh.ExportAsFixedFormat Type:=xlTypePDF, Filename:=sDateiname, _
Quality:=xlQualityStandard, OpenAfterPublish:=False
' Mail kreieren
With CreateObject("Outlook.Application").CreateItem(0)
.GetInspector                         ' sorgt für die Signatur
'.To = "Mail Adresse"                  ' Empfänger
.Subject = "Betreff " & Worksheets("Tabelle1").Range("C11") & "_" & Worksheets("A 1").Range("C7")     ' Betreff
.Body = "Dear Sirs," & vbCr & vbCr _
& "Text 1 " & vbCr _
& "Text 2 " & vbCr _
& "Text 3 " _
'& vbCr & .Body                  ' Mailtext mit Signatur
If Dir$(sDateiname)  "" Then .Attachments.Add sDateiname
.Display
End With
End Sub

Anzeige
AW: Bitte die Arbeitsmappe hochladen...
03.05.2021 13:49:43
Andreas
Hi Jochen,
Danke für deinen Lösungsvorschlag.
Hab aber ein Problem damit, wenn von der 1 dann doch auf die 2 umgestellt wird,
werden die Zeilen nicht mehr eingeblendet.
Hast du dafür eine Lösung?
Vielen Dank vorab
Gruß Andreas
AW: Du könntest auch selbst..
03.05.2021 15:56:20
Jowe
...mal etwas googeln :-)

Public Sub MailMitPDFundSignatur()
Dim sDateiname As String, WSh As Worksheet
Set WSh = ThisWorkbook.Sheets("Tabelle1")
'alle Zeilen einblenden
Cells.EntireRow.Hidden = False
If Sheets("A 1").Range("C7") = 1 Then
'alle Zeilen einblenden
Cells.EntireRow.Hidden = False
Rows("142:157").EntireRow.Hidden = True
End If
If Sheets("A 1").Range("C7") = 2 Then
'alle Zeilen einblenden
Cells.EntireRow.Hidden = False
End If
' PDF erzeugen
sDateiname = WSh.Parent.Path & "\" & " Dateiname" & Worksheets("Tabelle1").Range("C11") & "_" & Worksheets("A 1").Range("C7").Value & ".pdf"
WSh.ExportAsFixedFormat Type:=xlTypePDF, Filename:=sDateiname, _
Quality:=xlQualityStandard, OpenAfterPublish:=False
' Mail kreieren
With CreateObject("Outlook.Application").CreateItem(0)
.GetInspector                         ' sorgt für die Signatur
'.To = "Mail Adresse"                  ' Empfänger
.Subject = "Betreff " & Worksheets("Tabelle1").Range("C11") & "_" & Worksheets("A 1").Range("C7")     ' Betreff
.Body = "Dear Sirs," & vbCr & vbCr _
& "Text 1 " & vbCr _
& "Text 2 " & vbCr _
& "Text 3 " _
'& vbCr & .Body                  ' Mailtext mit Signatur
If Dir$(sDateiname)  "" Then .Attachments.Add sDateiname
.Display
End With
End Sub
Gruß
Jochen
Anzeige
AW: Du könntest auch selbst..
03.05.2021 16:13:24
Andreas
ja da hast du vermutlich Recht :D
Nur bin ich noch recht neu was VBA angeht und wenn ich was gegoogelt hab kam dabei meist leider nur ................. dabei raus =(
Ich Danke dir für deine Hilfe, werde ich morgen gleich mal testen.
Gruß Andreas
AW: Du könntest auch selbst..
05.05.2021 08:46:54
Andreas
Hi Jochen,
habe das versucht, aber egal wie ich es umstelle, es funktioniert nicht.
Zwar werden die Zeilen jetzt ausgeblendet, dafür wird wieder egal was ich eingebe eine PDF von allen 4 Seiten erzeugt.
Gruß Andreas
AW: Du könntest auch selbst..
05.05.2021 10:33:03
Jowe
Hallo Andreas,
ich habe in Deiner Arbeitsmappe ab Zeile 158 bis zum Ende alle Zeilen markiert und entfernt
und auch alle Spalten K bis XFD entfernt. Vermutlich war da noch irgendwo etwas drin oder irgend ein Format gesetzt.
Mir dem unveränderten Code klappt das bei mir (XL20216) genau wie geplant. Ich hänge die Arbeitsmappe hier mal an.
https://www.herber.de/bbs/user/146004.xlsm
Gru?
Jochen
Anzeige
AW: Du könntest auch selbst..
05.05.2021 13:41:20
Andreas
Hallo Jochen,
komme einfach nicht weiter.
Deine Datei funktioniert bei mir auch, wenn ich die VBA aber in meine Originaldatei übernehme, wird immer von allen 4 Seiten die PDF erzeugt.
Hab das jetzt gefühlte 1000 mal versucht und weiß einfach nicht was ich falsch mache...
Denke fast ich brauche noch einen VBA Code, der mir auf Grund einer Bedingung die PDF von den ersten 3 oder den ersten 4 erstellt.
Hast du vielleicht eine Idee?
Gruß Andreas
AW: Du könntest auch selbst..
05.05.2021 14:59:02
JoWE
also Andreas,
hier mein letzter Versuch, wenn das dann auch nicht klappt, bin ich raus.
Tausche den Code einfach komplett aus:

Public Sub MailMitPDFundSignatur()
Dim sDateiname As String, WSh As Worksheet
Set WSh = ThisWorkbook.Sheets("Tabelle1")
'alle Zeilen einblenden
WSh.Cells.EntireRow.Hidden = False
WSh.Cells.EntireColumn.Hidden = False
WSh.Columns("K:XFD").Hidden = True
If Sheets("A 1").Range("C7") = 1 Then
WSh.Rows("142:157").EntireRow.Hidden = True
WSh.Rows("142:" & Rows.Count).EntireRow.Hidden = True
End If
If Sheets("A 1").Range("C7") = 2 Then
WSh.Rows("158:1048576").EntireRow.Hidden = True   'BEACHTE: Die 1048576 ist in Excel Version 2016 die größte (letzte) Zeilennummer!!
End If
' PDF erzeugen
sDateiname = WSh.Parent.Path & "\" & " Dateiname" & Worksheets("Tabelle1").Range("C11") & "_" & Worksheets("A 1").Range("C7").Value & ".pdf"
WSh.ExportAsFixedFormat Type:=xlTypePDF, Filename:=sDateiname, _
Quality:=xlQualityStandard, OpenAfterPublish:=False
' Mail kreieren
With CreateObject("Outlook.Application").CreateItem(0)
.GetInspector                         ' sorgt für die Signatur
'.To = "Mail Adresse"                  ' Empfänger
.Subject = "Betreff " & Worksheets("Tabelle1").Range("C11") & "_" & Worksheets("A 1").Range("C7")     ' Betreff
.Body = "Dear Sirs," & vbCr & vbCr _
& "Text 1 " & vbCr _
& "Text 2 " & vbCr _
& "Text 3 " _
'& vbCr & .Body                  ' Mailtext mit Signatur
If Dir$(sDateiname)  "" Then .Attachments.Add sDateiname
.Display
End With
'alle Zeilen einblenden
WSh.Cells.EntireRow.Hidden = False
WSh.Cells.EntireColumn.Hidden = False
End Sub
Gruß
Jochen
Anzeige
AW: Du könntest auch selbst..
05.05.2021 15:43:42
Andreas
Hallo Jochen,
hab den Code komplett getauscht, gleiches Ergebnis, bekomme immer 4 Seiten :(
Ich Danke dir für deine Hilfe, die vielen Lösungsvorschläge und deine Zeit.
Gruß Andreas
AW: Du könntest auch selbst..
05.05.2021 15:43:49
Andreas
Hallo Jochen,
hab den Code komplett getauscht, gleiches Ergebnis, bekomme immer 4 Seiten :(
Ich Danke dir für deine Hilfe, die vielen Lösungsvorschläge und deine Zeit.
Gruß Andreas
AW: Danke für die Rückmeldung, aber...
05.05.2021 17:16:34
JoWE
...versuch' doch mal die Inhalte (nicht den Makrocode) Deiner Original-Arbeitsmappe in meine hier angehängte Arbeitsmappe hineinzukopieren.
Danach teste nochmal - sonst fällt mir auch nichts mehr ein.
https://www.herber.de/bbs/user/146018.xlsm
toi toi toi
Gruß
Jochen
Anzeige
AW: PDF von bestimmtem Bereich ertzeugen
30.04.2021 11:50:38
bestimmtem
Hallo,

'Die folgenden 6 Zeilen habe ich eingefügt um den Bereich einzugrenzen, der als PDF erzeugt werden soll
max = Sheets("DQ").Range("AH3").Value
If max  2 Then max = 2
For i = 1 To max
vz = i * 51 - 50: bz = i * 51
Worksheets("GY ISF").Range ("A" & vz & ":J" & bz) '.PrintOut Copies:=1 .PrintPreview
das ist ja totaler Blödsinn. Das PDF ist doch schon vorher erzeugt worden.
Gruß
Rudi
AW: PDF von bestimmtem Bereich ertzeugen
30.04.2021 13:42:02
bestimmtem
Hi Rudi,
bin noch ziemlich neu was VBA angeht, da kann schon mal Blödsinn dabei rauskommen : )
Gerne kannst du mir sagen, wie ich es richtig machen soll.
Habe Jochen eben schon geantwortet und meine Testdatei angefügt.
https://www.herber.de/bbs/user/145878.xlsm
Mein Ziel ist eigentlich nur dass wenn im Tabellenblatt A 1 in C7 eine 1 steht soll aus dem Tabellenblatt "Tabelle1" eine PDF von Seite 1-3 erzeugt werden.
Ist die Zahl in A 1, Feld C7 eine 2, soll aus allen 4 Seiten eine PDF erzeugt werden.
Vielleicht kannst du mir ja sagen, wie ich das umschreiben muss.
Gruß Andreas
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige