Office: VBA-Laienproblem

Helfe beim Thema VBA-Laienproblem in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo liebe Excelianer, ich habe heute zum allerersten Mal in die VBA-Maske von Microsoft Excel hineingeschnuppert, um mir einen Button zum... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von Leviathan51, 28. August 2023.

  1. VBA-Laienproblem


    Hallo liebe Excelianer,

    ich habe heute zum allerersten Mal in die VBA-Maske von Microsoft Excel hineingeschnuppert, um mir einen Button zum automatisierten E-Mail-Versand aus Excel zu basteln. Grundsätzlich tut der Code bereits, was er soll: Beim Klick auf den Button öffnet sich ein Outlook-Element mit meinem vorformatierten Text. Auch das Ausfüllen der Platzhalter klappt dabei schon gut.

    Allerdings scheitere ich noch an der Falldefinition für den Versand.

    Ich habe ein Arbeitsplatz mit 500 Zeilen und über 100 Spalten, das in Zeile 1-2 Rahmendaten und in Zeile 3 verschiedene E-Mail-Adressen enthält. Die Spalten A und B sind ebenfalls mit Rahmendaten befüllt, C enthält Text, der für Platzhalter im Mail-Text eingesetzt wird. In Spalte D stehen abermals Rahmendaten. Alle anderen Zellen (E4:DQ500) können entweder leer oder mit "x" befüllt sein. Ich möchte nun erreichen, dass die E-Mail-Adresse in Zeile 3, sobald eine Zelle oder mehrere Zellen der gleichen Spalte "x" enthält/enthalten, als Empfänger des Outlook-Elements / mehrerer Outlook-Elemente eingesetzt wird - das mag mir als, wie gesagt, absolutem VBA-Neuling, der gestern noch nicht wusste, wie man die Entwicklertools überhaupt nutzt, aber nicht gelingen.

    Ich habe eine Beispieldatei angehängt (nicht als xlsm) und meine "Teilerfolge" beziehen sich auf diesen Code:

    ****
    Option Explicit



    Sub BtnSend()

    Send_Email

    End Sub


    Private Sub Send_Email()

    Dim sTitle As String

    sTitle = "Aufgabenerfüllung"


    Dim sTemplate As String

    sTemplate = Sheets("Textvorlage").Shapes(1).TextFrame2.TextRange.Text


    Dim app_Outlook As Outlook.Application

    Set app_Outlook = New Outlook.Application


    Dim objEmail As Outlook.MailItem


    Dim sEmail_Address As String

    Dim iRow As Integer

    For iRow = 4 To 10

    If Cells(iRow, 5) = "x" Then

    sEmail_Address = Range("G3")



    End If



    Dim Aufgaben As String

    Dim iColumn As Integer

    For iColumn = 5 To 10

    If Cells(iColumn, 7) = "x" Then

    Aufgaben = Cells(iColumn, 3)



    Dim sHTML As String

    sHTML = Replace(sTemplate, “Aufgabe z”, Aufgabe xy)



    Set objEmail = app_Outlook.CreateItem(olMailItem)

    objEmail.To = sEmail_Address

    objEmail.Subject = sTitle

    objEmail.Body = sHTML

    objEmail.Display False

    'objEmail.Send



    End If

    Next

    Next


    Set objEmail = Nothing

    Set app_Outlook = Nothing


    MsgBox "Alert Mails created", vbInformation, "Done"

    End Sub

    ***

    Es hakt mit großer Sicherheit bei den Spalten- und Reihenzuweisungen... aber ich komme leider auf keinen grünen Zweig :/
    Ich bin mir sicher, dass der ein oder andere einen eleganteren Code-Aufbau im Kopf hat, würde aber, sofern es irgendwie möglich ist, zunächst gern (nah) bei dieser Struktur bleiben.
     
    Leviathan51, 28. August 2023
    #1
  2. Lutz Fricke Erfahrener User
    Hallo Leviathan51,

    in der äußeren For-Next-Schleife (iRow) läufst Du nur Spalte 5 durch, aber nicht die übrigen Spalten.
    In der inneren Schleife läuft dann alles durcheinander, weil Du iColumns und iRow durcheinanderschmeißt.
    zusätzlich ist in der Replace-Anweisung die Variable "Aufgabe xy" verkehrt.

    Probier doch mal so:
    Code:
    Private Sub Send_Email()
    
    Dim sTitle As String
    sTitle = "Aufgabenerfüllung"
    
    Dim sTemplate As String
    sTemplate = Sheets("Textvorlage").Shapes(1).TextFrame2.TextRange.Text
    
    Dim app_Outlook As Outlook.Application
    Set app_Outlook = New Outlook.Application
    
    Dim objEmail As Outlook.MailItem
    Dim sEmail_Address As String
    
    Dim iRow As Integer
    Dim Aufgaben As String
    Dim iColumn As Integer
    
    For iColumn = 5 To 10
        For iRow = 4 To 10
            If Cells(iRow, iColumn) = "x" Then
                    sEmail_Address = Cells(3, iColumn)
                    Aufgaben = Cells(iRow, 3)
            End If
        Next iRow
    Next iColumn
    
    Dim sHTML As String
    sHTML = Replace(sTemplate, "Aufgabe z", Aufgabe)
    
    Set objEmail = app_Outlook.CreateItem(olMailItem)
    objEmail.To = sEmail_Address
    objEmail.Subject = sTitle
    objEmail.Body = sHTML
    objEmail.Display False
    'objEmail.Send
    
    Set objEmail = Nothing
    Set app_Outlook = Nothing
    
    MsgBox "Alert Mails created", vbInformation, "Done"
    
    End Sub
    Nachdem mir die richtigen Vorlagen fehlen, kann ich es leider nicht testen.

    Natürlich kommen dann noch Feinheiten hinzu:
    • Mailversand nur bei gefundenem "x" (jetzt wird immer eine Mail erstellt).
    • Eine Mail pro Aufgabe oder eine Mail für alle Aufgaben pro Spalte?
    • Oder eine Mail pro Aufgabe an alle Mailadressen dieser Aufgabe?
    Aber zum weiteren Tüfteln sollte es reichen.

    Gruß,
    Lutz
     
    Lutz Fricke, 28. August 2023
    #2
  3. Hallo Lutz,

    vielen lieben Dank für Zeit und Rat. Die meisten der Probleme hat dein Vorschlag sehr gut in den Griff bekommen und die übrigen sind vermutlich in den von dir erwähnten Feinheiten zu suchen. Während zuvor viel zu viele und zu großen Teilen identische E-Mails erstellt wurden, was vermutlich daran lag, dass, wie du schreibst, alles kreuz und quer durcheinander schleifte, wird aktuell unabhängig von der Anzahl der testweisen x-Einträge lediglich eine E-Mail erstellt.

    Es sieht so aus, als würde der Code dabei nach dem x mit dem höchsten Spaltenwert suchen. Das Ziel ist, für jedes x eine eigene E-Mail zu erstellen: wenn in F5 und F7 ein x steht sollte der Adressat in F3 also zwei E-Mails mit den jeweils angepassten Informationen aus den Textplatzhaltern (Aufgaben) erhalten (die funktionieren jetzt super :)). Ich versuche mal mein Glück, speichere deinen Code aber vorher guuut ab - danke nochmal!
     
    Leviathan51, 29. August 2023
    #3
  4. Lutz Fricke Erfahrener User

    VBA-Laienproblem

    Dann probier doch mal so:
    Code:
    Private Sub Send_Email()
    
    Dim sTitle As String
    Dim sTemplate As String
    Dim app_Outlook As Outlook.Application
    
    Dim objEmail As Outlook.MailItem
    Dim sEmail_Address As String
    
    Dim iRow As Integer
    Dim Aufgaben As String
    Dim iColumn As Integer
    
    Dim sHTML As String
    
    sTitle = "Aufgabenerfüllung"
    sTemplate = Sheets("Textvorlage").Shapes(1).TextFrame2.TextRange.Text
    
    Set app_Outlook = New Outlook.Application
    
    For iColumn = 5 To 10
        For iRow = 4 To 10
            If Cells(iRow, iColumn) = "x" Then
                sEmail_Address = Cells(3, iColumn)
                Aufgaben = Cells(iRow, 3)
    
                sHTML = Replace(sTemplate, "Aufgabe z", Aufgabe)
            
                Set objEmail = app_Outlook.CreateItem(olMailItem)
                objEmail.To = sEmail_Address
                objEmail.Subject = sTitle
                objEmail.Body = sHTML
                objEmail.Display False
                'objEmail.Send
                
                Set objEmail = Nothing
                
                MsgBox "Alert Mails created", vbInformation, "Done"
            End If
        Next iRow
    Next iColumn
    
    Set app_Outlook = Nothing
    
    End Sub
    Ich habe die ganzen Dim's an den Anfang gesetzt (macht man so der Übersichtlichkeit wegen) und die Erstellung der Mails in die innere Schleife. Bei jedem "x" wird jetzt eine Mail mit der Aufgabe an den Adressaten erstellt.

    Gruß,
    Lutz
     
    Lutz Fricke, 29. August 2023
    #4
  5. Hallo nochmal,

    Lutz, du bist super! Funktioniert astrein.

    Noch einen schönen Tag!
     
    Leviathan51, 29. August 2023
    #5
Thema:

VBA-Laienproblem

Die Seite wird geladen...
  1. VBA-Laienproblem - Similar Threads - VBA Laienproblem

  2. VBA in einer Zeile zu lang

    in Microsoft Excel Hilfe
    VBA in einer Zeile zu lang: Moin, mein VBA Code ist für eine Zeile zu lang. Kann mir einer helfen wie ich den auf 2 Zeilen aufteilen Kann? arrSchuhDaten = Array(Range("A6"), Range("F6"), Range("J6"), Range("A7"),...
  3. Listbox wird nicht breiter, Schriftgrösse ändert sich

    in Microsoft Excel Hilfe
    Listbox wird nicht breiter, Schriftgrösse ändert sich: Hallo, ich habe ein Formular dessen Breite ich mit der Maus ändern kann. Im Formular habe ich einen Rahmen und darin eine Listbox deren Breite an die Formularbreite angepasst wird....
  4. Kontrollkästchen aktivieren ohne VBA - wenn KK1 angekreuzt dann KK2 auch

    in Microsoft Excel Hilfe
    Kontrollkästchen aktivieren ohne VBA - wenn KK1 angekreuzt dann KK2 auch: Hallo zusammen, erstmal danke für all die Tipps und Kniffe, die ich ohne eigenen Thread gefunden und gelernt habe. Leider finde ich mein Thema nirgendwo... Aktuell habe ich zwei Spalten mit...
  5. Per Hyperlink ausgeblendetes Blatt einblenden

    in Microsoft Excel Hilfe
    Per Hyperlink ausgeblendetes Blatt einblenden: Hola ins Forum, ich bräuchte mal wieder eure Hilfe. Ich habe ein Tabellenblatt das mir als Register dient und wo Hyperlinks eingefügt sind um auf das dazugehörige Blatt zu springen. Diese Blätter...
  6. Bilder über VBA Größe und DPI ändern für Webshop

    in Microsoft Excel Hilfe
    Bilder über VBA Größe und DPI ändern für Webshop: Hallo Excel Spezialisten, Ich habe mir eine recht aufwendige Tabelle gebastelt, aus der ich Daten für meinen Webshop generiere und in einer .csv bereitstelle. Es werden neue Preislisten...
  7. VBA: Platzhalter ersetzen und evtl. leere Zeile einfügen

    in Microsoft Word Hilfe
    VBA: Platzhalter ersetzen und evtl. leere Zeile einfügen: Hallo zusammen, ich habe eine Word-Vorlage mit Platzhaltern, in die ich mit VBA Daten aus einer Excel-Datei einfüge (in eine Excel-Zeile schreibe ich alle Daten für ein neues Word-Dokument). So...
  8. Erstellung eines Dynamischen Kalenders (ggf. VBA)

    in Microsoft Word Hilfe
    Erstellung eines Dynamischen Kalenders (ggf. VBA): Guten Morgen an Alle, ich hoffe, es geht euch soweit gut :) Ich wende mich heute an euch, weil ich gerade vollkommen verzweifle und irgendwie so ganz und garnicht weiterkomme und irgendwie...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden