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

Forumthread: Excel VBA > Einfügen aus Clipboard

Excel VBA > Einfügen aus Clipboard
16.11.2021 15:51:07
Juergen
Hallo ich steh mal wieder an einem Problem.
Ich möchte gerne einen kopierten Bereich im Outlook Mail einfügen, der Text wird bereits eingefügt aber ich würde es gerne übersichtlicher gestallten.
a la "Copy Paste" ... nur ohne manuelles zutun da später eine Schlaufe laufen soll...
Mein Code bisher:

Private Sub CommandButton2_Click()
' Application.ScreenUpdating = False
Set ThisBook = ActiveWorkbook
Dim Nachricht As Object, OutApp As Object
Dim myClpObj As DataObject
Set myClpObj = New DataObject
Dim mailadd, mailcc As String
mailadd = "empfänger@empfänger.ch" 'ThisBook.Worksheets("Einstellung").Range("G12").Value
mailcc = "copy@copy.ch" 'ThisBook.Worksheets("Einstellung").Range("G14").Value
ThisBook.Worksheets("Abfrage").Activate
Dim plac As Integer
plac = ThisBook.Worksheets("Abfrage").Cells(Rows.Count, 1).End(xlUp).Row + 1
Dim rngbereich As Range
Set rngbereich = ThisBook.Worksheets("Abfrage").Range("A4:G" & plac)
rngbereich.Copy
'rngbereich.CopyPicture Appearance:=xlScreen, Format:=xlPicture
'rngbereich.CopyPicture xlScreen, xlBitmap
Set OutApp = CreateObject("Outlook.Application")
Set Nachricht = OutApp.CreateItem(0)
' >>>>> MAIL ADRESSE ANPASSEN 
" & "
Holla" .display ' >>>>>> Automatisch senden
Hier der link zur Beispielmappe:
https://www.herber.de/bbs/user/149185.xlsm
Hier noch ein Bild meiner Wunsch-Vorstellung:
Wunschdarstellung
Danke für eure vorschläge.
Gruss
Jürgen
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel VBA > Einfügen aus Clipboard
16.11.2021 16:58:42
JoWE
Hallo Jürgen,
das Einfügen der formtaierten Tabelle über die Zwischenablage bringt mit VBA nur Text in den Email-Body.
Aber mit sendkeys geht's doch. Versuch mal:

Private Sub CommandButton2_Click()
' Application.ScreenUpdating = False
Set ThisBook = ActiveWorkbook
Dim Nachricht As Object, OutApp As Object
Dim myClpObj As DataObject
Set myClpObj = New DataObject
Dim mailadd, mailcc As String
mailadd = "empfänger@empfänger.ch" 'ThisBook.Worksheets("Einstellung").Range("G12").Value
mailcc = "copy@copy.ch" 'ThisBook.Worksheets("Einstellung").Range("G14").Value
ThisBook.Worksheets("Abfrage").Activate
Dim plac As Integer
plac = ThisBook.Worksheets("Abfrage").Cells(Rows.Count, 1).End(xlUp).Row + 1
Dim rngbereich As Range
Set rngbereich = ThisBook.Worksheets("Abfrage").Range("A4:G" & plac)
rngbereich.Copy
Set OutApp = CreateObject("Outlook.Application")
Set Nachricht = OutApp.CreateItem(0)
' >>>>> MAIL ADRESSE ANPASSEN >>>>> Automatisch senden Application.Wait (Now + TimeValue("0:00:05")) 'mit der Wartezeit ("0:00:05") musst Du evtl. ein wenig testen
Application.SendKeys ("^v")
Set OutApp = Nothing
Set Nachricht = Nothing
End Sub
VG
Jochen
Anzeige
AW: Excel VBA > Einfügen aus Clipboard
16.11.2021 18:12:56
volti
Hallo Jürgen,
so sollte es besser klappen (ungetestet):
PS: Die Zeilenumbrüche müssen in HTML-Mails ersetzt werden.
With Nachricht
    .To = mailadd
    .CC = mailcc
    .Subject = "Terminüberwachung vom " & Date & " " & Time
    sMailtext = "Test" & vbLf & vbLf
    .htmlbody = Replace(sMailtext & "<br><br>Grüsse Blabla.", vbLf, "<br>")
    .display
    With .Getinspector.WordEditor.Application.Selection
        .Start = Len(sMailtext) + 1
        .Paste                                  ' Grafik in Mail einfügen
    End With
    ' .Send
End With
Gruß
Karl-Heinz
Anzeige
AW: Excel VBA > Einfügen aus Clipboard
17.11.2021 06:55:21
Juergen
Hallo Karl-Heinz,
danke für den Tipp, aber ich möchte die Formatierte Tabelle einfügen.
Der Tipp von Jochen funktioniert einzeln, aber leider nur bis ich die Schlaufe einbaue.
Hat noch jemand eine Idee ?
Gruss
Jürgen
AW: Excel VBA > Einfügen aus Clipboard
17.11.2021 09:29:08
volti
Hallo Jürgen,
genau das wird doch gemacht, eingefügt, was Du kopiert hast.
Hast Du das überhaupt ausprobiert?
Hier habe ich es Dir jetzt mal eingebaut.
https://www.herber.de/bbs/user/149203.xlsm
Gruß
KH
Anzeige
AW: Excel VBA > Einfügen aus Clipboard
17.11.2021 14:06:02
Juergen
Hallo Karl-Heinz,
nein ich habe es nicht ausprobiert da in der Bemerkung stand " 'Grafik in Mail einfügen ".
Sorry, ich probiere es nachher grad aus.
Danke
Gruss
Jürgen
AW: Excel VBA > Einfügen aus Clipboard
17.11.2021 16:21:40
Juergen
funktioniert perfekt, DANKE
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Einfügen aus Clipboard mit Excel VBA


Schritt-für-Schritt-Anleitung

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.

  2. Modul erstellen: Klicke mit der rechten Maustaste auf "VBAProject" und wähle "Einfügen" > "Modul".

  3. Code einfügen: Füge den folgenden Code in das Modul ein:

    Private Sub CommandButton2_Click()
       Application.ScreenUpdating = False
       Set ThisBook = ActiveWorkbook
       Dim Nachricht As Object, OutApp As Object
       Dim myClpObj As DataObject
       Set myClpObj = New DataObject
       Dim mailadd, mailcc As String
       mailadd = "empfänger@empfänger.ch"
       mailcc = "copy@copy.ch"
       ThisBook.Worksheets("Abfrage").Activate
       Dim plac As Integer
       plac = ThisBook.Worksheets("Abfrage").Cells(Rows.Count, 1).End(xlUp).Row + 1
       Dim rngbereich As Range
       Set rngbereich = ThisBook.Worksheets("Abfrage").Range("A4:G" & plac)
       rngbereich.Copy
    
       Set OutApp = CreateObject("Outlook.Application")
       Set Nachricht = OutApp.CreateItem(0)
       With Nachricht
           .To = mailadd
           .CC = mailcc
           .Subject = "Betreff"
           .Display
           Application.Wait (Now + TimeValue("0:00:05"))
           Application.SendKeys ("^v") ' Fügen Sie die kopierten Daten ein
       End With
    
       Set OutApp = Nothing
       Set Nachricht = Nothing
       Application.ScreenUpdating = True
    End Sub
  4. Anpassen der E-Mail-Adresse: Ändere die mailadd und mailcc Variablen auf die gewünschten E-Mail-Adressen.

  5. Testen: Führe das Makro aus, um sicherzustellen, dass die Daten korrekt aus der Zwischenablage in die E-Mail eingefügt werden.


Häufige Fehler und Lösungen

  • Fehler: "Objekt nicht gefunden": Stelle sicher, dass du das Microsoft Forms 2.0 Object Library aktiviert hast. Gehe zu "Extras" > "Verweise" und aktiviere es.
  • Problem mit der Zwischenablage: Wenn die Daten nicht eingefügt werden, stelle sicher, dass der kopierte Bereich tatsächlich in der Zwischenablage ist.
  • SendKeys funktioniert nicht: Manchmal kann die Verwendung von SendKeys unzuverlässig sein. In diesem Fall kann der Clipboard-Zugriff über die DataObject-Klasse hilfreich sein.

Alternative Methoden

  • Direktes Einfügen ohne SendKeys: Anstatt SendKeys zu verwenden, kannst du die Paste-Methode direkt auf die Auswahl im Word-Editor anwenden:

    With Nachricht.GetInspector.WordEditor.Application.Selection
       .Paste
    End With
  • Excel VBA Clipboard Funktionen: Nutze die getfromclipboard-Funktion, um den Text direkt von der Zwischenablage zu holen, wenn du nur Text und nicht das gesamte Format einfügen möchtest.


Praktische Beispiele

Hier ist ein Beispiel für das Einfügen einer formatierten Tabelle in eine E-Mail:

With Nachricht
    .To = mailadd
    .CC = mailcc
    .Subject = "Terminüberwachung vom " & Date & " " & Time
    .HTMLBody = Replace("Hier sind die Daten:<br><br>", vbLf, "<br>")
    .GetInspector.WordEditor.Application.Selection.Paste
    .Display
End With

Dieses Beispiel zeigt, wie du eine E-Mail mit formatierter Tabelle aus Excel heraus erstellen kannst und dabei die HTMLBody-Eigenschaft nutzt.


Tipps für Profis

  • ScreenUpdating deaktivieren: Deaktiviere Application.ScreenUpdating, um die Ausführung zu beschleunigen und visuelle Ablenkungen zu vermeiden.
  • Clipboard VBA optimieren: Verwende die DataObject-Klasse, um die Clipboard-Funktionalität besser zu steuern, beispielsweise mit myClpObj.GetFromClipboard oder myClpObj.SetText.
  • Automatisierung mit Schleifen: Bei wiederholten E-Mail-Versendungen kannst du Schleifen implementieren, um mehrere E-Mails automatisiert zu versenden.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass die Daten aus der Zwischenablage korrekt eingefügt werden?
Vergewissere dich, dass der kopierte Bereich in Excel tatsächlich in der Zwischenablage vorhanden ist, bevor du das Makro ausführst.

2. Funktioniert dieser Code in allen Excel-Versionen?
Ja, der Code sollte in den meisten modernen Excel-Versionen funktionieren, die VBA unterstützen, einschließlich Excel 2010 bis 2023.

3. Was ist der Unterschied zwischen SendKeys und der direkten Verwendung der Paste-Methode?
SendKeys simuliert Tasteneingaben, was unzuverlässig sein kann, während die direkte Verwendung der Paste-Methode sicherstellt, dass der Inhalt korrekt in das Dokument eingefügt wird.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige