Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

.body über Excel VBA Code befüllen

Forumthread: .body über Excel VBA Code befüllen

.body über Excel VBA Code befüllen
12.10.2022 09:48:08
Georg
Liebe Mitglieder, der Code unten macht prinzipiell was er soll. Was ich nicht schaffe:
Ich hätte gerne in der Zeile
.body = Ticketinhalt.Value
nicht nur die definierte Range integriert, sondern auch noch einen Text vorab dazu. Meine Versuche, das mit & und einer strgVariabeln zu verbinden schlugen fehl, ohne dass ich weiß warum. Es wurde nach wie vor nur die Variable "Ticketinhalt" eingefügt - keine Fehlermeldung
Die Mail - also .body - sollte so aussehen, als Beispiel:
"Dies ist mein Text, mit dem ich meinen Ansprechpartner anschreiben will......"
und dann erst die kopierte Range, was eine Tabelle ist.
Ich kenne mich nicht so gut aus damit, der Code ist aus dem Netz, und ich schaffe es nicht ganz, ihn an meine Anforderungen anzupassen.
der Commandbutton liegt auf einer Userform.
Ein Tipp wäre prima Gruß Georg

Private Sub CommandButton1_Click()
'Updated by Extendoffice 2017/9/14
'Button für den Mailversand Rollen und Rechte Anlage User-Account, Outlook Gruppen
Dim xOutApp As Object
Dim xOutMail As Object
Dim xMailbody As Object
On Error Resume Next
Set xOutApp = CreateObject("Outlook.Application")
Set xOutMail = xOutApp.CreateItem(0)
'das letzte Worksheet bestimmen
Dim lastWsh As Worksheet
Set lastWsh = ThisWorkbook.Worksheets(Sheets.Count)
'Wo endet Ticket1: finde das Keyword
Dim EndeTicket1 As Range
Set EndeTicket1 = Columns(2).Find(what:="EndeTicket1")
'Den Ticketinhalt für Ticket Kontoanlage etc bestimmen (so kann ich dann die anderen Rechte alle untereinander schreiben
Dim Ticketinhalt As Range
Set Ticketinhalt = lastWsh.Range(Cells(1, 1), Cells(EndeTicket1.Row - 1, EndeTicket1.Column))
Ticketinhalt.Copy
On Error Resume Next
'Und ab geht die Post
With xOutMail
.to = "support@gedikomservicedesk.freshservice.com"
.CC = ""
.BCC = ""
.Subject = "Konto Anlage" & "  " & TxtBoxBetreffBPx.Value
.body = Ticketinhalt.Value
.Display   'or use .Send
End With
On Error GoTo 0
Set xOutMail = Nothing
Set xOutApp = Nothing
Application.Wait (Now + TimeValue("0:00:05"))
' Dann die Zwischenablage einfügen
'Application.SendKeys ("%bi") ' im Menü BEARBEITEN (Alt-B) das e-I-nfügen wählen
Application.SendKeys ("^v") ' Strg-V Anweisung ist die 2.Möglichkeit statt Alt-B + I
End Sub
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: .body über Excel VBA Code befüllen
12.10.2022 10:09:49
Oberschlumpf
Hi Georg,
änder mal diese Zeile...

.body = Ticketinhalt.Value
...um in...

.body = "Dies ist mein Text, mit dem ich meinen Ansprechpartner anschreiben will......" & vbCrLf & vbCrLf
lastWsh.Range(Cells(1, 1), Cells(EndeTicket1.Row - 1, EndeTicket1.Column)).Copy
.body = .body & ActiveSheet.Paste 'wenn lastWsh nicht das aktive Sheet ist, dann vielleicht wie folgt
.body = .body & lastWsh.Paste 'also ENTWEDER diese Codezeile, ODER die vorhergehende - eine dieser beiden Zeilen musst du löschen!
Application.CutCopyMode = False
Die Codezeilen in deinem Code...

Dim Ticketinhalt As Range
Set Ticketinhalt = lastWsh.Range(Cells(1, 1), Cells(EndeTicket1.Row - 1, EndeTicket1.Column))
Ticketinhalt.Copy
...kannst du löschen
UND die Codezeilen...

Application.Wait (Now + TimeValue("0:00:05"))
' Dann die Zwischenablage einfügen
'Application.SendKeys ("%bi") ' im Menü BEARBEITEN (Alt-B) das e-I-nfügen wählen
Application.SendKeys ("^v") ' Strg-V Anweisung ist die 2.Möglichkeit statt Alt-B + I
...MUSST DU LÖSCHEN! (nach meiner Meinung zumindest; denn ich empfinde SendKeys als eine Programmierer-Unsitte - aber ok, jeder, wie er mag)
Nur in diesem Fall benötigst du die SendKeys-Zeilen nicht mehr.
Konnte ich helfen?
Wenn nein, zeig bitte per Upload eine aussagekräftige Bsp-Datei mit genügend Bsp-daten in den richtigen Zellen und deinem Code.
Ciao
Thorsten
Anzeige
AW: .body über Excel VBA Code befüllen
12.10.2022 10:56:30
Georg
Hallo Thorsten,
wenn ich die Zeile verwende
.body = .body & ActiveSheet.Paste 'wenn lastWsh nicht das aktive Sheet ist, dann vielleicht wie folgt
kommt dies in der Mail:
Dies ist mein Text, mit dem ich meinen Ansprechpartner anschreiben will......
Wahr
-------
Wenn ich die Zeile verwende
.body = .body & lastWsh.Paste
ist paste markiert mit der Meldung: Fehler beim Kompilieren: function oder variable erwartet.
Alles andere hab ich umgesetzt wie von dir beschrieben.
Was nun: Datei hochladen? Gruß G
Anzeige
AW: .body über Excel VBA Code befüllen
12.10.2022 10:54:42
volti
Hallo Georg,
hier noch eine Idee. Da kannst Du bei Bedarf auch Deine Signatur anfügen.
Code:


Private Sub CommandButton1_Click() Dim sMailtext As String, EndeTicket1 As Range With ThisWorkbook.Worksheets(Sheets.Count) Set EndeTicket1 = .Columns(2).Find(what:="EndeTicket1") If Not EndeTicket1 Is Nothing Then .Range(.Cells(1, 1), .Cells(EndeTicket1.Row - 1, EndeTicket1.Column)).Copy Else MsgBox "Kein Keyword gefunden!", vbCritical, "Mail senden" Exit Sub End If End With sMailtext = "Dies ist mein Text, mit dem ich meinen Ansprechpartner anschreiben will......" With CreateObject("Outlook.Application").CreateItem(0) .GetInspector .to = "support@gedikomservicedesk.freshservice.com" .CC = "" .BCC = "" .Subject = "Konto Anlage" & " " & TxtBoxBetreffBPx.Value .body = sMailtext & vbLf & vbLf & .body ' ggf. mit Signatur .Display ' or use .Send With .GetInspector.WordEditor.Application.Selection .start = Len(sMailtext) + 1 ' Einfügeposition ggf. anpassen .Paste ' Bereich einfügen End With End With End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: .body über Excel....perfekt es geht
12.10.2022 11:01:08
Georg
... jetzt Karl-Heinz, bin jedesmal wieder baff über die schnelle Hilfe. Wäre ich nie draufgekommen von allein Gruß Georg
AW: .body über Excel....perfekt es geht
12.10.2022 11:10:57
volti
Danke für die positive Rückmeldung, Georg 😊
Gruß KH
AW: .body über Excel VBA Code befüllen
12.10.2022 11:41:38
snb
Warum so incredibly aufwändig ?

Private Sub CommandButton1_Click()
With CreateObject("Outlook.Application").CreateItem(0)
.to = "support@gedikomservicedesk.freshservice.com"
.Subject = "Konto Anlage" & "  " & TxtBoxBetreffBPx.Value
.body = Sheets(Sheets.Count).Columns(2).Find("EndeTicket1").Value
.send
End With
End Sub

Anzeige
AW: .body über Excel VBA Code befüllen
12.10.2022 12:13:18
volti
Hi snb,
so wie ich das sehe, wird hier ja nur das Feld mit dem "Suchwort" gefunden und in die Mail als Text gesetzt. Dieses ist obendrein auch noch das "Suchwort" selbst.
Ich glaube nicht, dass das im Sinne des Fragers ist.
Gruß KH
AW: .body über Excel VBA Code befüllen
12.10.2022 14:33:37
snb
Kann man doch selbst einfach anpassen; z.B.

    .body = Sheets(Sheets.Count).Columns(2).Find("EndeTicket1").offset(-1).Value

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

.body über Excel VBA Code befüllen


Schritt-für-Schritt-Anleitung

Um das .body-Feld in einem Excel VBA-Code zu befüllen, befolge diese Schritte:

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Userform oder Modul erstellen: Füge eine Userform hinzu oder öffne ein bestehendes Modul.
  3. Button hinzufügen: Füge einen CommandButton in deine Userform ein.
  4. Code eingeben: Verwende den folgenden Code, um das .body-Feld zu befüllen:
Private Sub CommandButton1_Click()
    Dim xOutApp As Object
    Dim xOutMail As Object
    Dim EndeTicket1 As Range
    Dim sMailtext As String

    Set xOutApp = CreateObject("Outlook.Application")
    Set xOutMail = xOutApp.CreateItem(0)

    ' Das letzte Worksheet bestimmen
    With ThisWorkbook.Worksheets(Sheets.Count)
        Set EndeTicket1 = .Columns(2).Find(what:="EndeTicket1")
        If Not EndeTicket1 Is Nothing Then
            sMailtext = "Dies ist mein Text, mit dem ich meinen Ansprechpartner anschreiben will......" & vbCrLf & vbCrLf
            .Range(.Cells(1, 1), .Cells(EndeTicket1.Row - 1, EndeTicket1.Column)).Copy
        Else
            MsgBox "Kein Keyword gefunden!", vbCritical, "Mail senden"
            Exit Sub
        End If
    End With

    With xOutMail
        .To = "support@gedikomservicedesk.freshservice.com"
        .Subject = "Konto Anlage" & "  " & TxtBoxBetreffBPx.Value
        .Body = sMailtext & vbCrLf & vbCrLf
        .GetInspector.WordEditor.Application.Selection.Paste
        .Display  ' oder .Send, um die Mail zu senden
    End With

    Application.CutCopyMode = False
    Set xOutMail = Nothing
    Set xOutApp = Nothing
End Sub

Häufige Fehler und Lösungen

  • Fehler beim Kompilieren: Wenn du die Zeile .body = .body & lastWsh.Paste verwendest, erhältst du möglicherweise den Fehler "Funktion oder Variable erwartet". Stelle sicher, dass du .Paste nicht direkt in den .body-Text einfügst.

  • Keine E-Mail gesendet: Wenn die E-Mail nicht gesendet wird, prüfe, ob du den Display-Befehl anstelle von Send verwendest. Bei Display öffnet sich die E-Mail zur Überprüfung, während Send sie sofort versendet.

  • Text nicht in der E-Mail: Achte darauf, die Copy- und Paste-Methoden korrekt zu verwenden. Wenn du den Code anpasst, stelle sicher, dass der benötigte Text vorher in der Zwischenablage ist.


Alternative Methoden

Anstatt die Zwischenablage zu verwenden, kannst du den Text direkt in das .body-Feld einfügen, ohne die Copy- und Paste-Methoden:

.body = sMailtext & vbCrLf & vbCrLf & ThisWorkbook.Worksheets(Sheets.Count).Range("A1").Value

Das ist eine einfachere Methode, um Daten direkt in die E-Mail einzufügen, ohne auf die Zwischenablage zurückgreifen zu müssen.


Praktische Beispiele

Hier sind einige Beispiele, wie du das .body-Feld in verschiedenen Szenarien anpassen kannst:

  1. Mit HTML-Inhalt: Wenn du HTML formatieren möchtest, kannst du den .HTMLBody verwenden:
.HTMLBody = "<h1>Dies ist mein Text</h1>" & _
            "<p>" & Ticketinhalt.Value & "</p>"
  1. Einzelnes Tabellenblatt per Mail versenden: Um ein spezifisches Tabellenblatt zu versenden:
Set lastWsh = ThisWorkbook.Sheets("DeinTabellenblatt")
  1. Beispiel mit Signatur: Füge deine Signatur am Ende des E-Mail-Texts hinzu:
.body = sMailtext & vbCrLf & "Mit freundlichen Grüßen," & vbCrLf & "Dein Name"

Tipps für Profis

  • Verwende vbCrLf für Zeilenumbrüche im .body, um den Text leserlicher zu gestalten.
  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung, um sicherzustellen, dass dein Code auch bei unerwarteten Situationen stabil bleibt.
  • Dokumentation: Kommentiere deinen Code gründlich, um die Nachvollziehbarkeit und Wartbarkeit zu verbessern.

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen .Body und .HTMLBody? .Body erstellt eine einfache Textversion der E-Mail, während .HTMLBody es ermöglicht, HTML-Formatierungen zu verwenden.

2. Wie kann ich sicherstellen, dass meine E-Mail immer versendet wird? Verwende .Send anstelle von .Display, um die E-Mail automatisch zu versenden, ohne dass der Benutzer sie manuell bestätigen muss.

3. Was bedeutet Application.CutCopyMode = False in VBA? Dieser Befehl hebt den Kopiermodus auf und entfernt die gestrichelte Umrandung um den kopierten Bereich.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige