Seriendruck Pläne per Mail verschicken

.. das wohl mächtigste Werkzeug in Bill Gates' Büro-Sippe. Ob reine Formeln, PowerQuery oder VBA. Hier bleiben kaum Wünsche unerfüllt.
Hobbit
Beiträge: 85
Registriert: 12. Aug 2024, 08:41
Hat sich bedankt: 4 Mal
Danksagung erhalten: 11 Mal
Kontaktdaten:

Re: Seriendruck Pläne per Mail verschicken

#51

Beitrag von Hobbit »

Moin,
mit diesem Code:

Code: Alles auswählen

Option Explicit
Const EMBED_ATTACHMENT As Long = 1454
Const stSubject As String = "Einsatzplan"
Const vaMsg As Variant = "falls man das möchte, hier einen vorgefertigten text"
Const vaCopyTo As Variant = "hobbit@test.de"
Sub Send_Active_Fahrer1()
Dim stFileName As String
Dim vaRecipients As Variant
Dim noSession As Object
Dim noDatabase As Object
Dim noDocument As Object
Dim workspace As Object
Dim noEmbedObject As Object
Dim noAttachment As Object
Dim stAttachment As String
' erstellt das PDF von Seite 1 im gleichen Ordner, wie sich das Workbook befindet
ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
ThisWorkbook.Path & "\Einsatzplan.pdf", Quality:=xlQualityStandard, _
 IncludeDocProperties:=False, IgnorePrintAreas:=True
 ' Bereitstellung des Emailanhangs
stAttachment = ThisWorkbook.Path & "\Einsatzplan.pdf"
' Empängerliste (bei automatischem Versand) Array
vaRecipients = VBA.Array("hobbit@Test.de")
' Laden der Lotus COM Objekte
Set noSession = CreateObject("Notes.NotesSession")
Set noDatabase = noSession.GETDATABASE("", "")
'Falls Notes nicht geöffnet ist
If noDatabase.IsOpen = False Then noDatabase.OPENMAIL
' Email erstellen
Set noDocument = noDatabase.CreateDocument
Set noAttachment = noDocument.CreateRichTextItem("stAttachment")
Set noEmbedObject = noAttachment.EmbedObject(EMBED_ATTACHMENT, "", stAttachment)
With noDocument
.Form = "Memo"
.sendTo = vaRecipients
.copyTo = vaCopyTo
' vorgegebens Subjekt
.subject = stSubject
' Input Box
'.Subject = InputBox("Please Enter the Message Subject", "Message Subject")
'.Body = vaMsg
.SaveMessageOnSend = True
.PostedDate = Now()
'.Send 0, vaRecipients
End With
Set workspace = CreateObject("Notes.NotesUIWorkspace")
Call workspace.EDITDOCUMENT(True, noDocument).GOTOFIELD("Body")
' Speicher leeren
Set noEmbedObject = Nothing
Set noAttachment = Nothing
Set noDocument = Nothing
Set noDatabase = Nothing
Set noSession = Nothing
' MsgBox
MsgBox "Die Mail ist erstellt. Bitte wechseln Sie zu NOTES", vbInformation
End Sub
klappt ja alles soweit, bis auf das ich nicht Verschiedene Tabellenblätter senden kann.

Dein Code hat leider nicht geklappt.
Wo könnte jetzt noch der Fehler liegen?
MFG Jens
Benutzeravatar
d'r Bastler
Beiträge: 832
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 224 Mal
Danksagung erhalten: 118 Mal

Re: Seriendruck Pläne per Mail verschicken

#52

Beitrag von d'r Bastler »

Moin Jens,

dann werde ich mal versuchen Deinem Code den passenden Mantel zu verpassen, mit dem Du dann mehrere Blätter senden kannst :)
Aber bitte nicht erschrecken, wenn auch Deine Codeteile dann etwas anders aussehen ...
lg
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Hobbit
Beiträge: 85
Registriert: 12. Aug 2024, 08:41
Hat sich bedankt: 4 Mal
Danksagung erhalten: 11 Mal
Kontaktdaten:

Re: Seriendruck Pläne per Mail verschicken

#53

Beitrag von Hobbit »

Vielen Dank
MFG Jens
Benutzeravatar
d'r Bastler
Beiträge: 832
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 224 Mal
Danksagung erhalten: 118 Mal

Re: Seriendruck Pläne per Mail verschicken

#54

Beitrag von d'r Bastler »

Moin!

Hier mein Umbau, vorab erläutert:
ok - Step-byStep:

Diese Schandtaten habe ich Deinem Code angetan:

unnötige Variable entsorgt
Variablentyp Variant to String geändert, aus vRec... wurde sMailTo
WICHTIG: Ich habe auch Deine Public Variables geändert. Aus Deinen va wurden Strings, die Du in den per Call aufgerufenen Prozeduren anpassen musst. Strg+H -> In diesem Projekt
Code üersichtlich strukturiert (Tabs & Zeilenumbrüche)

Eine For...Each-Schleife (den Mantel) gebaut, die durch alle Sheets Deiner Mappe flitzt, aber ohne, dass Du das siehst (ScreenUpdating = False)
Einen Zähler eingebaut, der Dir abschließend erzählt, wie vielel E-Mails verschickt wurden.

Code: Alles auswählen

Option Explicit
Const EMBED_ATTACHMENT As Long = 1454
Const sSubject As String = "Einsatzplan"
Const sMSG As String = "falls man das möchte, hier einen vorgefertigten text"
Const sCopyTo As String = "hobbit@test.de"
Sub Send_Active_Fahrer1()
Dim sMailTo As String, sAttachment As String
Dim noSession As Object, noDatabase As Object, noDocument As Object
Dim noEmbedObject As Object, noAttachment As Object, workspace As Object
Dim wb As Workbook, sht As Worksheet, iMails As Integer

Set wb = ThisWorkbook

Application.ScreenUpdating = False
For Each sht In wb.Sheets
    sht.Activate
    
    ' erstellt das PDF von Seite 1 im gleichen Ordner, wie sich das Workbook befindet
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    ThisWorkbook.Path & "\Einsatzplan.pdf", Quality:=xlQualityStandard, _
     IncludeDocProperties:=False, IgnorePrintAreas:=True
     
     ' Bereitstellung des Emailanhangs
    sAttachment = ThisWorkbook.Path & "\Einsatzplan.pdf"
    ' Empängerliste (bei automatischem Versand) Array
    sMailTo = Cells(1, 16)
    
    ' Laden der Lotus COM Objekte
    Set noSession = CreateObject("Notes.NotesSession")
    Set noDatabase = noSession.GETDATABASE("", "")
    
    'Falls Notes nicht geöffnet ist
    If noDatabase.IsOpen = False Then noDatabase.OPENMAIL
    
    ' Email erstellen
    Set noDocument = noDatabase.CreateDocument
    Set noAttachment = noDocument.CreateRichTextItem("sAttachment")
    Set noEmbedObject = noAttachment.EmbedObject(EMBED_ATTACHMENT, "", sAttachment)
    
    With noDocument
        .Form = "Memo"
        .sendTo = sMailTo
        .copyTo = sCopyTo
        ' vorgegebens Subjekt
        .Subject = sSubject
        .SaveMessageOnSend = True
        .PostedDate = Now()
        '.Send 0, sMailTo
    End With
    
    Set workspace = CreateObject("Notes.NotesUIworkspace")
    Call workspace.EDITDOCUMENT(True, noDocument).GOTOFIELD("Body")
    
    ' Speicher leeren
    Set noEmbedObject = Nothing
    Set noAttachment = Nothing
    Set noDocument = Nothing
    Set noDatabase = Nothing
    Set noSession = Nothing
    iMails = iMails + 1
Next 'sht
Application.ScreenUpdating = True

MsgBox iMails & " erstellt. Bitte wechseln Sie zu NOTES", vbInformation

End Sub
Viel Erfolg damit!

lg
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Benutzeravatar
d'r Bastler
Beiträge: 832
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 224 Mal
Danksagung erhalten: 118 Mal

Re: Seriendruck Pläne per Mail verschicken

#55

Beitrag von d'r Bastler »

Moin Jens,

eben habe ich noch einen kleinen Fallstrick entdeckt: Deine Sheets brauchen in Zelle P1 eine E-Mail-Adresse! Dein Array habe ich umgangen, sorry ;)

lg
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Hobbit
Beiträge: 85
Registriert: 12. Aug 2024, 08:41
Hat sich bedankt: 4 Mal
Danksagung erhalten: 11 Mal
Kontaktdaten:

Re: Seriendruck Pläne per Mail verschicken

#56

Beitrag von Hobbit »

Moin,
das klappt schon mal TOP.
Jetzt wäre da noch etwas, und zwar durchsucht er ja sämtliche Register, was ja auch gut ist, aber das letzte Register brauch nicht gesendet werden, weil da die Zeiten von den Fahrern hinterlegt sind, die per Sverweis in dem Einsatzplan eingetragen werden.

Kann man vielleicht den Betreff in einer Zelle hinterlegen, damit da z.B. Einsatzplan KW 36 steht ( in Zelle Q1 )?

Vielen Dank für die Spitzen Hilfe.
MFG Jens
Benutzeravatar
d'r Bastler
Beiträge: 832
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 224 Mal
Danksagung erhalten: 118 Mal

Re: Seriendruck Pläne per Mail verschicken

#57

Beitrag von d'r Bastler »

Moin Jens,

und noch ein Nachtrag, der meine Schandtaten ein wenig erläutert:

Du hast reine Texte als Variant deklariert. Texte - und dazu gehören auch eMail-Adressen mit ihrem @ - deklariert man besser als String. Das verhindert, dass aus einem Text z.B. ein Array wird. Variants können alles beinhalten, Strings aber eben nur Text ... Fehlervermeidung.

Der VBE versteht alle Variablen, die nicht ausdrücklich definiert sind, als Variant. D.h. Du musst das nicht extra deklarieren. Nachdem z.B. Arrays als Variant deklariert werden, habe ich mir angewöhnt, als Kommentar ein 'Array anzufügen, wobei das durch mein Prefix a für Arrays eigentlich unnötig ist.

Das Code-Layout habe ich an das unter Codern allgemein übliche angepasst, weil es den Code erheblich übersichtlicher macht. Die Tabs stellen die Ebenen des Codes dar: Machst Du eine If...then, ein With ... auf, dann bleiben die jeweiligen End-Anweisungen auf der gleichen Tab-Stufe. Der auszuführende Code wird eine Stufe weiter geschubst. So sieht man schnell, ob eine Ebene geschlossen wurde oder vergessen.

Womit ich mich beschäftigen werde, sind Deine no...-Objekte. Ohne es jetzt schon geprüft zu haben, kann ich mir vorstellen, dass da is... as Boolean einfacher wäre.

Hier noch -zum Verständnis meiner Variablen- der Link zu meiner aktuellen VBA Nomenklatur, die lediglich ein Vorschlag, sicher keine Vorschrift ist. Ich schlage lieber, als dass ich schreibe :lol:

Aber jetzt schönes Wochenende! Genieß den Sommer :)
lg
Folgende Benutzer bedankten sich beim Autor d'r Bastler für den Beitrag:
thowe
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Hobbit
Beiträge: 85
Registriert: 12. Aug 2024, 08:41
Hat sich bedankt: 4 Mal
Danksagung erhalten: 11 Mal
Kontaktdaten:

Re: Seriendruck Pläne per Mail verschicken

#58

Beitrag von Hobbit »

Vielen dank und ein schönes Wochenende.

Genieß die Sonne
MFG Jens
Hobbit
Beiträge: 85
Registriert: 12. Aug 2024, 08:41
Hat sich bedankt: 4 Mal
Danksagung erhalten: 11 Mal
Kontaktdaten:

Re: Seriendruck Pläne per Mail verschicken

#59

Beitrag von Hobbit »

Moin,

jetzt habe ich es hinbekommen das ich aus einer Zelle den Betreff habe.

.subject = Cells(1, 17).Value

Vielen dank für die Spitzen hilfe.
Folgende Benutzer bedankten sich beim Autor Hobbit für den Beitrag:
thowe
MFG Jens
Hobbit
Beiträge: 85
Registriert: 12. Aug 2024, 08:41
Hat sich bedankt: 4 Mal
Danksagung erhalten: 11 Mal
Kontaktdaten:

Re: Seriendruck Pläne per Mail verschicken

#60

Beitrag von Hobbit »

Moin,
Ich hätte da noch eine Frage.
Kann die Schleife die durchläuft, das Register Aushang weglassen?
Das brauch ja nicht Verschickt werden.
Ich kann es auch nicht verbergen, dann meckert er und ich brauche es für die Zeiten der Fahrer.

Vielen Dank.
MFG Jens
Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast