Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Teilausschnitte als Screenshot

Forumthread: VBA Teilausschnitte als Screenshot

VBA Teilausschnitte als Screenshot
28.10.2021 16:11:49
Christian
Hallo zusammen,
ich suche eine Möglichkeit einen vordefinierten Teilausschnitt ("A5:Y52") von zwei verschiedenen Reitern ("2021 Übersicht") und ("2022 Übersicht") in eine Mail als Screenshots untereinander einzuspielen. Mit einem Screenshot von "2021 Übersicht "habe ich bereits ein Script gefunden und integriert aber nun benötige ich die Erweiterung und bekomme das nicht hin. Das alte Script sieht wie folgt aus:

' Prozess per Mail versenden

Sub Button_Screenshot_Mail_Click()
Range("A5:Y52").CopyPicture xlScreen, xlPrinter
Dim oApp As Object
Set oApp = CreateObject("Outlook.Application")
On Error Resume Next
With oApp.CreateItem(0)
Application.Wait 1
.To = Worksheets("Konfig").Range("AA2").Value
.Subject = Worksheets("Konfig").Range("AA3").Value
.Body = Worksheets("Konfig").Range("AA1").Value
.Display
SendKeys "^{END}~^v", True
.GetInspector 'fügt die Standard-Signatur an
End With
On Error GoTo 0
Set oApp = Nothing
End Sub

Vielen Dank für eure Hilfe.
Beste Grüße,
Christian
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Teilausschnitte als Screenshot
28.10.2021 18:28:29
volti
Hallo Christian,
hier eine Idee dazu (ungetetstet).
Mit SendKeys würde ich da jetzt nicht arbeiten wollen.
Code:

[Cc][+][-]

Option Explicit Private Sub Mail_BereichalsBild() ' Sendet Mail mit integriertem Bereich als Bild mit Signatur Dim WSh1 As Worksheet, WSh2 As Worksheet Dim sMailtext As String Dim i As Integer Set WSh1 = ThisWorkbook.Sheets("Konfig") ' Blatt mit Maildaten With CreateObject("Outlook.Application").CreateItem(0) .BodyFormat = 2 ' HTML-Format, Angabe optional .Subject = WSh1.Range("AA2").Value ' Betreff .To = WSh1.Range("AA2").Value ' Empfänger .CC = "" ' Kopie sMailtext = WSh1.Range("A1").Value & vbLf .GetInspector ' Signatur holen .htmlbody = Replace(sMailtext, vbLf, "<br>") _ & .htmlbody .Display Set WSh2 = ThisWorkbook.Sheets("2021 Übersicht") ' Datenblatt For i = 1 To 2 Do WSh2.Range("A5:Y52").CopyPicture Appearance:=xlScreen, Format:=xlBitmap If Err.Number = 0 Then Exit Do Err.Clear Loop With .GetInspector.WordEditor.Application.Selection .Start = Len(sMailtext) + 1 .Paste ' Grafik in Mail einfügen End With Set WSh2 = ThisWorkbook.Sheets("2022 Übersicht") ' Datenblatt Next i End With End Sub

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

Anzeige
AW: VBA Teilausschnitte als Screenshot
28.10.2021 23:39:57
Christian
Hallo Karl-Heinz,
perfekt. Musste noch 1-2 Sachen abändern aber dann wurde es so ausgespielt wie gewollt.
Vielen Dank für die Hilfe.
Gruß,
Christian
;
Anzeige

Infobox / Tutorial

VBA Teilausschnitte als Screenshot versenden


Schritt-für-Schritt-Anleitung

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

  2. Füge ein Modul hinzu: Klicke mit der rechten Maustaste auf dein Projekt im Projekt-Explorer, wähle Einfügen und dann Modul.

  3. Kopiere den folgenden Code in das Modul:

    Option Explicit
    
    Private Sub Mail_BereichalsBild()
       ' Sendet Mail mit integriertem Bereich als Bild mit Signatur
       Dim WSh1 As Worksheet, WSh2 As Worksheet
       Dim sMailtext As String
       Dim i As Integer
    
       Set WSh1 = ThisWorkbook.Sheets("Konfig") ' Blatt mit Maildaten
    
       With CreateObject("Outlook.Application").CreateItem(0)
           .BodyFormat = 2 ' HTML-Format
           .Subject = WSh1.Range("AA2").Value ' Betreff
           .To = WSh1.Range("AA2").Value ' Empfänger
           sMailtext = WSh1.Range("A1").Value & vbLf
           .GetInspector ' Signatur holen
           .htmlbody = Replace(sMailtext, vbLf, "<br>") & .htmlbody
           .Display
    
           Set WSh2 = ThisWorkbook.Sheets("2021 Übersicht") ' Datenblatt
           For i = 1 To 2
               Do
                   WSh2.Range("A5:Y52").CopyPicture Appearance:=xlScreen, Format:=xlBitmap
                   If Err.Number = 0 Then Exit Do
                   Err.Clear
               Loop
               With .GetInspector.WordEditor.Application.Selection
                   .Start = Len(sMailtext) + 1
                   .Paste ' Grafik in Mail einfügen
               End With
               Set WSh2 = ThisWorkbook.Sheets("2022 Übersicht") ' Datenblatt
           Next i
       End With
    End Sub
  4. Passe die Blattnamen und Zellreferenzen an deine Bedürfnisse an (z. B. "2021 Übersicht", "2022 Übersicht", "A5:Y52").

  5. Führe das Makro aus und überprüfe dein Outlook auf die gesendete E-Mail mit dem Screenshot.


Häufige Fehler und Lösungen

  • Fehler beim Senden der E-Mail: Stelle sicher, dass Outlook korrekt konfiguriert ist und die Makros in Excel aktiviert sind.
  • Das Bild wird nicht angezeigt: Überprüfe, ob der Bereich "A5:Y52" die gewünschten Daten enthält. Es kann auch hilfreich sein, das Bildformat in der CopyPicture Methode zu ändern (z. B. xlBitmap).
  • VBA-Code läuft nicht: Achte darauf, dass die Blattnamen exakt mit den Namen in deinem Arbeitsbuch übereinstimmen.

Alternative Methoden

  • Anstatt Screenshots in eine E-Mail zu integrieren, kannst du auch den vba print screen Befehl verwenden, um direkt einen Screenshot des gesamten Bildschirms zu erstellen.
  • Eine andere Möglichkeit ist die Verwendung von Excel-Funktionen wie SPEICHERN.UNTER, um die gewünschten Bereiche als separate Bilddateien zu speichern und diese dann manuell in die E-Mail einzufügen.

Praktische Beispiele

Ein einfaches Beispiel könnte sein, dass du die Daten von "2021 Übersicht" und "2022 Übersicht" in einer E-Mail untereinander anzeigst:

Set WSh2 = ThisWorkbook.Sheets("2021 Übersicht")
' Screenshot des ersten Bereichs
WSh2.Range("A5:Y52").CopyPicture Appearance:=xlScreen, Format:=xlBitmap
With .GetInspector.WordEditor.Application.Selection
    .Paste ' Grafik in Mail einfügen
End With

Set WSh2 = ThisWorkbook.Sheets("2022 Übersicht")
' Screenshot des zweiten Bereichs
WSh2.Range("A5:Y52").CopyPicture Appearance:=xlScreen, Format:=xlBitmap
With .GetInspector.WordEditor.Application.Selection
    .Paste ' Grafik in Mail einfügen
End With

Tipps für Profis

  • Verwende Application.ScreenUpdating = False: Dies kann helfen, das Makro schneller auszuführen, indem die Bildschirmaktualisierung während der Ausführung des Codes deaktiviert wird.
  • Fehlerbehandlung implementieren: Nutze On Error GoTo, um mögliche Fehler abzufangen und eine benutzerfreundliche Fehlermeldung anzuzeigen.
  • Vor dem Versenden der E-Mail: Überprüfe, ob alle notwendigen Informationen im Body der E-Mail korrekt eingefügt wurden.

FAQ: Häufige Fragen

1. Wie kann ich den Screenshot anpassen? Du kannst die Zellreferenzen in Range("A5:Y52") ändern, um einen anderen Bereich zu erfassen.

2. Funktioniert dieser Code in Excel 365? Ja, der Code sollte in Excel 365 sowie in anderen Versionen von Excel mit VBA-Unterstützung funktionieren. Achte darauf, dass Makros aktiviert sind.

3. Kann ich mehrere Screenshots in einer E-Mail versenden? Ja, indem du die CopyPicture Methode für die gewünschten Bereiche mehrmals ausführst und die Resultate in einer E-Mail zusammenfügst.

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