VBA Mail mehrere Empfänger und Text als HTML

Moderator: ModerationP

VBA Mail mehrere Empfänger und Text als HTML

Beitragvon Phil. » 18. Sep 2021, 11:43

Hey zusammen,
ich habe mir online folgenden Code zusammengesucht, stoße aber bei zwei Themen an meine Grenzen.
Google hilft immer nur stückchenweise weiter, und nach mehreren Stunden bin ich mit den Nerven am Ende :lol:

1. BCC soll an mehrere Empfänger gehen, welche in der genannten Range aufgeführt werden. Das Feld BCC bleibt aber in Outlook einfach leer
2. Der Text aus "Textfeld 1" ist formatiert, wird aber in der Mail als Fließtext ausgegeben ohne jegliche Formatierung. Es fehlen Zeilenumbrüche und zwei Links

(Den Anhang habe ich wegen Datenschutz mit XXX versehen, funktioniert aber ebenfalls)

Der Rest funktioniert, auch wenn es mit Sicherheit bessere und elegantere Lösungen gibt. Seht es mir nach :oops:

Code: Alles auswählen
Sub VBA_Mail_Onboarding()

    Dim rng As Range
    Dim OutApp As Object
    Dim OutMail As Object
    Dim StrBody As String
    Dim olOldbody As String
   
    StrText = Tabelle20.Shapes("Textfeld 1").TextFrame2.TextRange.Text
    StrBody = "<font size=""2,5"" face=""Calibri"">" & StrText

    Set rng = Sheets("Email_Onboarding").Range("B2:G62")
    On Error Resume Next
    On Error GoTo 0

    If rng Is Nothing Then
        MsgBox "The selection is not a range or the sheet is protected" & _
               vbNewLine & "please correct and try again.", vbOKOnly
        Exit Sub
    End If

    With Application
        .EnableEvents = False
        .ScreenUpdating = False
    End With

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

    On Error Resume Next
    With OutMail
        .GetInspector.Display
        olOldbody = .htmlBody
        .To = Tabelle20.Range("H2")
        .CC = Tabelle20.Range("H3")
        .BCC = Tabelle20.Range("H3:E62")
        .Subject = Tabelle20.Range("H5")
        .Attachments.Add ("XXX")
        .htmlBody = StrBody & olOldbody
        .Display
       
    End With
    On Error GoTo 0

    With Application
        .EnableEvents = True
        .ScreenUpdating = True
    End With

    Set OutMail = Nothing
    Set OutApp = Nothing
End Sub


Ich danke Euch für Eure Tipps, Hilfestellungen und/oder Ideen!

VG Phil.
Phil.
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 30
Registriert: 15. Jul 2021, 22:39

Re: VBA Mail mehrere Empfänger und Text als HTML

Beitragvon 1Matthias » 18. Sep 2021, 13:54

Moin!
Eine komplette Range kannst du m.W. so nicht übergeben. Du müsstest den Bereich in einer Schleife durchgehen und dir darin aus den Emailadressen einen String basteln. Den übergibst du dann an bcc. Einfach mit ";" anfügen.
Und die Formate sollten auch nicht automatisch übernommen werden können. Da müsstest du ggf. auch in einer Schleife die Character des Textfeldes auslesen und damit den HtmlBody erstellen.
VG
1Matthias
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 972
Registriert: 15. Aug 2017, 18:36

Re: VBA Mail mehrere Empfänger und Text als HTML

Beitragvon @Mase » 18. Sep 2021, 17:17

Ohne Fehlerbehandlung:

Code: Alles auswählen
Sub main()

    Debug.Print getBCC(Range("E3:H62"))
   
End Sub

Function getBCC(ByRef rng As Excel.Range)

        Dim r       As Variant
        Dim sBCC    As String
       
        For Each r In rng.Rows
           With Application
               sBCC = sBCC & Join(.Transpose(.Transpose(r)), ";")
           End With
        Next
     
        getBCC = sBCC

End Function
@Mase
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 19
Registriert: 08. Sep 2021, 06:51

Re: VBA Mail mehrere Empfänger und Text als HTML

Beitragvon 1Matthias » 18. Sep 2021, 18:12

Moin!
Die Funktion von Mase ist natürlich eleganter als eine SChleife durch alle Zellen der Range. Man müsste die Funktion aber ggf. so (oder auch anders) abwandeln.
Code: Alles auswählen
Function getBCC(ByRef rng As Excel.Range)

        Dim r       As Variant
        Dim sBCC    As String
       
        For Each r In rng.Rows
           With Application
               sBCC = sBCC & Join(.Transpose(.Transpose(r)), ";") & ";"
           End With
        Next
       
        sBCC = Left(sBCC, Len(sBCC) - 1)
        getBCC = sBCC

End Function


Ansonsten werden beim Zeilenwechsel die Adresse ohne Trenner zusammengefügt. In der Zeile wird durch Join der Trenner eingefügt.

VG
1Matthias
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 972
Registriert: 15. Aug 2017, 18:36

Re: VBA Mail mehrere Empfänger und Text als HTML

Beitragvon Phil. » 19. Sep 2021, 00:28

Hey ihr Beide,

vielen Dank für Eure Unterstützung.
Ich habe es wie gewünscht hinbekommen und für den HTML-Text habe ich ebenfalls eine Lösung gefunden (Direkteingabe in VBA)

Euch noch ein schönes Wochenende,

VG Phil.
Phil.
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 30
Registriert: 15. Jul 2021, 22:39

Re: VBA Mail mehrere Empfänger und Text als HTML

Beitragvon @Mase » 19. Sep 2021, 09:35

Moin 1Matthias,

korrekt, zählt für mich zur Fehlerbehandlung.
Gleichwie, wenn Leerzellen zwischendrin stehen.
Hierzu müsste eine Schleife die doppelten ";" erkennen/ersetzen.

Das Letzte ";" ist unproblematisch.

Valide Emailadressen angenommen.
@Mase
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 19
Registriert: 08. Sep 2021, 06:51


Zurück zu Excel Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 21 Gäste