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

Mehrere PDF-Dateien erzeugen

Mehrere PDF-Dateien erzeugen
18.08.2018 16:42:12
Frank
Hallo,
ich habe eine Tabelle "Daten" mit einer Spalte 1 (A1-A100) mit Zahlenwerten und einer Spalte 2 mit Text (=Dateinamen) (B1-B100). In einer Tabelle "Verarbeitung" wird auf den Wert der ersten Zeile von "Daten" Spalte 1 zugegriffen und damit Berechnungen durchgeführt. Damit die erste Zeile genutzt wird, habe ich ihn einer fixen Zelle einen Zähler der am Anfang auf 1 steht und den ich dann auf 2 usw. erhöhe.
Nun suche ich einen Weg, um automatisch "Verarbeitung" in eine PDF zu drucken mit dem Input aus "Daten" und als Dateinamen aus Spalte 2 abzuspeichern. Dann soll die nächste Zeile von "Daten" (also "Zähler" auf 2) in der Tabelle "Verarbeitung" genutzt werden und das Ergebnis als neue PDF unter Dateinamen aus Spalte 2 abgespeichert werden. Am Ende möchte ich also 100 PDF-Dateien mit den Ergebnissen der Verarbeitung haben.
Hat jemand eine Idee, wie ich das anstelle?
Viele Grüße
Frank

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

Betreff
Datum
Anwender
Anzeige
AW: Mehrere PDF-Dateien erzeugen
18.08.2018 16:57:17
Sepp
Hallo Frank,
wenn der Dateiname in Spalte B vollständig, also inkl. Pfad und Erweiterung ist, dann z.B. so.
Modul Modul5
Option Explicit 
 
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 
 
Sub printPDF() 
  Dim lngIndex As Long 
 
  With Tabelle1 
    For lngIndex = 1 To 100 
      .Range("A1") = lngIndex 'Zelle mit dem Zähler anpassen! 
      .Calculate 
      .ExportAsFixedFormat xlTypePDF, Sheets("Daten").Cells(lngIndex, 2).Text 
      Sleep 500 
    Next 
    .Range("A1") = 1 
  End With 
   
End Sub 

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


 ABCDEF
1Gruß Sepp
2
3

Anzeige
AW: Mehrere PDF-Dateien erzeugen
19.08.2018 10:12:35
Frank
Hallo Sepp,
zunächst einmal ganz herzlichen Dank für deinen Code. Die Sache funktioniert schon einmal prinzipiell, und das ist super.
Ein Problem gibt es bei "Private Declare....", da kommt "Fehler beim Kompilieren: Der Code in diesem Projek muss für die Verwendeung auf 64-Bit-Systemen aktualisiert werden..." Das liegt vermutlich daran, dass ich Excel 2016 benutze, das aber in den Einstellungen des Posts nicht angeben konnte (es gab nur bis 2010 zur Auswahl). Wenn ich die "Private Declare" und "Sleep" auskommentiere, läuft der Code. Allerdings weiß ich nicht, was ich damit anrichte. Wie geht die Pause mit XL 2016?
Was ich nicht verstehe: "With" bezieht sich auf "Tabelle1" - aber woher weiß Excel, was damit gemeint ist? Und wie ändere ich das? Tabelle1 ist ja kein benannter Bereich und auch nicht der Name eines Sheets.
Ich würde noch gerne das, was als PDF gespeichert wird, noch einmal auf dem Standarddrucker ausdrucken. Kann ich das nach der PDF-Generierung einfach ein .PrintOut einfügen?
Viele Grüße
Frank
Anzeige
AW: Mehrere PDF-Dateien erzeugen
19.08.2018 10:18:55
Sepp
Hallo Frank,
ich verwende Office 365 / XL2016 32bit, Win 10 64bit.
Das Sleep setzt eine Pause zwischen den Schritten, damit der Export/Druck reibungslos durchläuft.
Probiere es so.
Modul Modul1
Option Explicit 
 
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 
  
Sub printPDF() 
  Dim lngIndex As Long 
  
  With Sheets("Tabelle1") 'Tabellenname anpassen! 
    For lngIndex = 1 To 100 
      .Range("A1") = lngIndex 'Zelle mit dem Zähler anpassen! 
      .Calculate 
      .ExportAsFixedFormat xlTypePDF, Sheets("Daten").Cells(lngIndex, 2).Text 
      .PrintOut 
      Sleep 500 
    Next 
    .Range("A1") = 1 
  End With 
    
End Sub 

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


 ABCDEF
1Gruß Sepp
2
3

Anzeige
AW: Mehrere PDF-Dateien erzeugen
19.08.2018 14:12:39
Frank
Hallo Sepp,
super - es macht genau, was es soll. Vielen Dank! Ich wollte die PDfs generieren, um sie dann mit dem Makro Excel_Serial_Mail() (wohl von Andreas Thehos) zu verschicken. Zuletzt kam mir der Gedanke, dass ich auch beide "verquicken" könnte, um die Fehleranfälligkeit zu verringern. Das ist mir nun gelungen und der Code läuft prima.
Aber: Die Sache sieht mir nicht so richtig "robust" aus - ich bin ja in VBA ahnungslos. Vermutlich sollte da noch irgendwo ein "sleep" mehr hinein, damit sich Excel nicht "verschluckt". Ich wäre dir sehr dankbar, wenn du noch einmal auf den Code schauen könntest und ggf. die Sache stabiler machen könntest:
   Sub PrintMailPDF()
Dim lngIndex As Long
Dim objOLOutlook As Object
Dim objOLMail As Object
Dim lngMailNr As Long
Dim lngZaehler As Long
On Error GoTo ErrorHandler
Set objOLOutlook = CreateObject("Outlook.Application")
lngMailNr = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row
For lngZaehler = 2 To lngMailNr
If Cells(lngZaehler, 2)  "" Then
With Sheets("Verarbeitung")
'For lngIndex = 1 To 3
.Range("d1") = lngZaehler
.Calculate
.ExportAsFixedFormat xlTypePDF, Sheets("Daten").Cells(lngZaehler, 2).Text
.PrintOut
Sleep 500
End With
Set objOLMail = objOLOutlook.CreateItem(olMailItem)
With Sheets("Mail")
With objOLMail
.To = Cells(lngZaehler, 1)
.CC = "testmai@makro.de"
.Subject = Cells(lngZaehler, 2) & " - " & Cells(lngZaehler, 4)
.BodyFormat = olFormatPlain
.Body = "Hallo " & Cells(lngZaehler, 3) & "," & vbCrLf
Dim strAttachmentPfad1 As String
strAttachmentPfad1 = ActiveSheet.Cells(lngZaehler, 6)
.Attachments.Add strAttachmentPfad1
.Send
'.Display
End With
End With
Set objOLMail = Nothing
End If
Next lngZaehler
Set objOLOutlook = Nothing
Exit Sub
ErrorHandler:
MsgBox Err.Number & " " & Err.Description & " " & Err.Source, vbInformation
Exit Sub
End Sub   
Viele Grüße
Frank
Anzeige
AW: Mehrere PDF-Dateien erzeugen
19.08.2018 17:25:01
Sepp
Hallo Frank,
Sub PrintMailPDF()
  Dim objOLOutlook As Object, objOLMail As Object
  Dim lngMailNr As Long, lngIndex As Long, lngZaehler As Long

  On Error GoTo ErrorHandler

  Set objOLOutlook = CreateObject("Outlook.Application")
  lngMailNr = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row

  For lngZaehler = 2 To lngMailNr
    If Cells(lngZaehler, 2) <> "" Then
      With Sheets("Verarbeitung")
        'For lngIndex = 1 To 3 
        .Range("d1") = lngZaehler
        .Calculate
        .ExportAsFixedFormat xlTypePDF, Sheets("Daten").Cells(lngZaehler, 2).Text
        .PrintOut
        Sleep 500
      End With
      Set objOLMail = objOLOutlook.CreateItem(olMailItem)
      With Sheets("Mail")
        With objOLMail
          .To = Cells(lngZaehler, 1)
          .CC = "testmai@makro.de"
          .Subject = Cells(lngZaehler, 2) & " - " & Cells(lngZaehler, 4)
          .BodyFormat = olFormatPlain
          .Body = "Hallo " & Cells(lngZaehler, 3) & "," & vbCrLf
          Dim strAttachmentPfad1 As String
          strAttachmentPfad1 = ActiveSheet.Cells(lngZaehler, 6)
          .Attachments.Add strAttachmentPfad1
          .Send
          '.Display 
        End With
      End With
      Sleep 500
      Set objOLMail = Nothing
    End If
  Next lngZaehler
  Set objOLOutlook = Nothing
  Exit Sub

ErrorHandler:
  MsgBox Err.Number & " " & Err.Description & " " & Err.Source, vbInformation
  Exit Sub
End Sub

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0

Ob die Pausen ausreichen hängt von deinem System ab, musst du halt austesten.
Ansonsten ist der Code OK.
 ABCDEF
1Gruß Sepp
2
3

Anzeige
AW: Mehrere PDF-Dateien erzeugen
19.08.2018 21:23:09
Frank
Hallo Sepp,
vielen Dank für die Korrektur. Gibt es eigentlich eine gute Stelle, wo man Syntaxfragen nachlesen kann, damit ich nicht jedesmal hier nachfragen muss? Ich möchte die Mails über unterschiedliche Accounts verschicken und finde, dass man das über AddressEntry macht. Auf der Erklärungsseite
https://docs.microsoft.com/en-us/office/vba/api/outlook.recipient.addressentry verstehe ich aber gar nicht, wie ich den Absende-Account in den Code einfügen muss. Gibt es eine gute Quelle, um Erläuterungen und Beispiele zu finden?
Viele Grüße
Frank
AW: Mehrere PDF-Dateien erzeugen
19.08.2018 21:44:31
Sepp
Hallo Frank,
den Absendernamen änderst du mit .SentOnBehlafOfName = "absender".
Das Mailkonto änderstdu mit Set .SendUsingAccount = .Session.Accounts.Item(Kontoname).
Siehe: http://www.office-loesung.de/ftopic482505_0_0_asc.php
 ABCDEF
1Gruß Sepp
2
3

Anzeige
AW: Mehrere PDF-Dateien erzeugen
20.08.2018 10:51:44
Frank
Hallo Sepp,
ich bekomme es leider nicht hin ;-). Ich habe jetzt sehr viel mit der Syntax herumexperimentiert - es klappt einfach nicht.
Wenn ich
Set .SendUsingAccount = .Session.Accounts.Item("info@meinedomain.de")
vor dem Send-Befehl einbaue kommt der Fehler "5 Ungültiger Prozeduraufruf oder ungültiges Argument VBAProjekt", baue ich es danach ein, kommt Fehler "-2147221238 Das Element wurde verschoben oder gelöscht Microsoft Outlook.
Ich habe natürlich sichergestellt, dass in Outlook ein Pop3 Account für info@meinedomain.de existiert und auch darüber versendet werden kann.
Viele Grüße
Frank
Anzeige

84 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige