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

Forumthread: Screenshot speichern

Screenshot speichern
23.09.2019 18:04:41
Niko
Hallo zusammen,
mit nachfolgenden Codezeilen erzeuge ich einen Screenshot von einer Userform.
Private Declare Sub keybd_event Lib "User32" _
(ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Sub cmdButton1()
keybd_event &H2C, 1, 0, 0
Gibt es eine Möglichkeit diesen Screenshot gleichzeitig z.B. im Ordner 'Eigene Dateien' zu speichern.
Danke für eure Mühe und schönen Abend.
Niko
Anzeige

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Screenshot speichern
23.09.2019 19:24:43
Nepumuk
Hallo Nico,
in welchen Format?
Gruß
Nepumuk
AW: Screenshot speichern
23.09.2019 22:45:56
Niko
Hallo Nepumuk,
danke für deine Rückmeldung.
Die UserForm füllt den ganzen Bildschirm aus und ich wollte den Screenshot als jpg oder png speichern.
Gruß
Niko
AW: Screenshot speichern
24.09.2019 10:53:25
Nepumuk
Hallo Nico,
teste mal:
Option Explicit

Private Declare PtrSafe Sub keybd_event Lib "user32.dll" ( _
    ByVal bVk As Byte, _
    ByVal bScan As Byte, _
    ByVal dwFlags As Long, _
    ByVal dwExtraInfo As LongPtr)
Private Declare PtrSafe Function GetSystemMetrics Lib "user32.dll" ( _
    ByVal nIndex As Long) As Long

Private Const SM_CXSCREEN As Long = 0&
Private Const SM_CYSCREEN As Long = 1&
Private Const PIXEL_TO_POINT As Double = 0.75

Public Sub Screenshot()
    Dim dblWidth As Double, dblHeight As Double
    Dim objChartObject As ChartObject
    dblWidth = GetSystemMetrics(SM_CXSCREEN) * PIXEL_TO_POINT
    dblHeight = GetSystemMetrics(SM_CYSCREEN) * PIXEL_TO_POINT
    Call keybd_event(vbKeySnapshot, 0, 0&, 0)
    DoEvents
    Set objChartObject = ActiveSheet.ChartObjects.Add( _
        Left:=0, Top:=0, Width:=dblWidth, Height:=dblHeight)
    With objChartObject
        Call .Activate
        Call .Chart.Paste
        Call .Chart.Export(Filename:="H:\Test.jpg", FilterName:="JPG", Interactive:=False) 'Pfad anpassen !!!
        
        Call .Delete
    End With
    Set objChartObject = Nothing
End Sub

Gruß
Nepumuk
Anzeige
AW: Screenshot speichern
24.09.2019 11:28:29
Niko
Hallo Nepumuk,
vielen Dank für den Code.
Der Screenshot ist perfekt. Allerdings wird nur ein leerer weißer Rahmen gespeichert.
Gruß
Niko
AW: Screenshot speichern
24.09.2019 11:54:54
Nepumuk
Hallo Nico,
kann ich nicht nachvollziehen, bei mir wird der Screenshot gespeichert. Das habe ich natürlich getestet. Welche Excelversion benutzt du?
Gruß
Nepumuk
Anzeige
AW: Screenshot speichern
24.09.2019 12:14:01
Niko
Hallo Nepumuk,
ich benutze aktuell 'Home365', hab es gerade unter Excel 2010 getestet - auch da wird nur ein leerer Rahmen gespeichert.
Ich habe deinen Code einer Schaltfläche zugewiesen, kann es damit zusammenhängen?
Gruß
Niko
AW: Screenshot speichern
24.09.2019 12:26:13
Nepumuk
Hallo Nico,
daran kann es nicht liegen, ich habe es soeben mit Button getestet, funktioniert einwandfrei. Ich habe Excel 2013. Step das Programm mal mit F8 durch, da sollte ein Screenshot vom VBA-Editor entstehen.
Gruß
Nepumuk
Anzeige
AW: Screenshot speichern
24.09.2019 12:35:26
Niko
Hallo Nepumuk,
wenn ich in der Prozedur F8 drücke, wird Private Sub UserForm_Initialize() - ohne weitere Meldung -gelb markiert!?
Gruß
Niko
AW: Screenshot speichern
24.09.2019 12:52:10
Nepumuk
Hallo Nico,
wird das Userform in meiner Prozedur geladen? Du solltest diese Prozedur ohne Userform mal mit F8 durchsteppen.
Gruß
Nepumuk
Anzeige
AW: Screenshot speichern
24.09.2019 13:21:48
Niko
Hallo Nepumuk,
es ist wie eben beschrieben: sobald ich in deiner Prozedur F8 drücke markiert das Programm sofort UserForm_initialize. Kann also deine Prozedur nicht durchsteppen.
Gruß
Niko
AW: Screenshot speichern
24.09.2019 14:23:32
Nepumuk
Hallo Nico,
kopiere die Prozedur inklusive der API-Deklarationen in ein Standardmodul und teste da.
Gruß
Nepumuk
Anzeige
AW: Screenshot speichern
24.09.2019 15:09:19
Niko
Hallo Nepumuk,
zwischenzeitlich habe ich folgendes herausgefunden:
Meine Arbeitsmappe enthält mehrere Userforms. Die Userform, die ich mit Hilfe deiner Prozedur speichern will, heißt 'frmAusgaben', die dazugehörende Tabelle ebenfalls 'Ausgaben'.
Mit Hilfe deiner Prozedur speichert er jetzt allerdings nicht den Screenshot der aktiven Userform (frmAusgaben), sondern eine andere Userform (frmInfo) aus der Arbeitsmappe.
Kann es sein, dass das im Code entsprechend spezifiziert werden muss?
Gruß
Niko
Anzeige
AW: Screenshot speichern
24.09.2019 15:38:07
Niko
Hallo Nepumuk,
mit Hilfe deiner Prozedur wird ein Screenshot der Tabelle hinter der Userform erstellt und dann als leerer weißer Rahmen in die Tabelle eingefügt! Der gleiche weiße Rahmen wird dann im Verzeichnis gespeichert das in der Prozedur angelegt ist.
Bei doevent wird der Screenshot erstellt und bei Paste in die Tabelle(!) eingefügt.
Den Test konnte ich nur ausgelagert in einem Modul machen.
Dein Code ist auf einem Button hinterlegt und wenn ich ihn da mache geht er wie schon beschrieben zu Userform_initialize.
Gruß
Niko
Anzeige
AW: Screenshot speichern
24.09.2019 17:16:38
Nepumuk
Hallo Nico,
eventuell ist etwas an deinen Grafikfiltern nicht in Ordnung. Ändere mal die Export-Methode so:
Call .Chart.Export(Filename:="H:\Test.bmp", FilterName:="BMP", Interactive:=False) 'Pfad anpassen !!!

Gruß
Nepumuk
Anzeige
AW: Screenshot speichern
24.09.2019 17:33:46
Niko
Hallo Nepumuk,
funktioniert leider auch nicht - leerer weißer Rahmen - allerdings mit 5.851 KB (!?).
Irgendwie scheint das Programm das Bild nicht zu exportieren sondern nur dessen Größe.
Vielleicht braucht's ein paar Tage Abstand :-)
Danke vielmals für deine Mühe.
Gruß
Niko
Anzeige
AW: Screenshot speichern
24.09.2019 20:06:30
Nepumuk
Hallo Nico,
wenn es so nicht funktioniert, dann hätte ich noch ein Ass im Ärmel, das ist allerdings etwas aufwendiger und ich muss zweimal speichern. einmal als bmp und dann z.B. als png, das bmp wird anschließend gelöscht. Soll ich?
Gruß
Nepumuk
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Screenshot speichern in Excel mit VBA


Schritt-für-Schritt-Anleitung

Um einen Screenshot von einer Userform in Excel zu erstellen und zu speichern, kannst du den folgenden VBA-Code verwenden. Dieser Code ermöglicht es dir, einen Screenshot als JPG oder BMP zu speichern.

  1. Öffne dein Excel-Dokument und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu (Einfügen > Modul).
  3. Kopiere den folgenden Code in das Modul:
Private Declare Sub keybd_event Lib "User32" _
    (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Private Declare Function GetSystemMetrics Lib "user32.dll" ( _
    ByVal nIndex As Long) As Long

Private Const SM_CXSCREEN As Long = 0
Private Const SM_CYSCREEN As Long = 1
Private Const PIXEL_TO_POINT As Double = 0.75

Public Sub Screenshot()
    Dim dblWidth As Double, dblHeight As Double
    Dim objChartObject As ChartObject

    dblWidth = GetSystemMetrics(SM_CXSCREEN) * PIXEL_TO_POINT
    dblHeight = GetSystemMetrics(SM_CYSCREEN) * PIXEL_TO_POINT

    Call keybd_event(vbKeySnapshot, 0, 0, 0)
    DoEvents
    Set objChartObject = ActiveSheet.ChartObjects.Add( _
        Left:=0, Top:=0, Width:=dblWidth, Height:=dblHeight)

    With objChartObject
        Call .Activate
        Call .Chart.Paste
        Call .Chart.Export(Filename:="H:\Test.jpg", FilterName:="JPG", Interactive:=False) ' Pfad anpassen !!!
        Call .Delete
    End With

    Set objChartObject = Nothing
End Sub
  1. Passe den Pfad in Filename:="H:\Test.jpg" an, um den Screenshot im gewünschten Verzeichnis zu speichern.
  2. Führe die Prozedur Screenshot aus, um den Screenshot zu erstellen und zu speichern.

Häufige Fehler und Lösungen

  • Screenshot wird nicht gespeichert: Stelle sicher, dass der Pfad, den du angegeben hast, korrekt ist und dass du die notwendigen Berechtigungen hast, um dort zu speichern.
  • Leerer Rahmen wird gespeichert: Dies kann passieren, wenn die Userform nicht aktiv ist. Stelle sicher, dass die Userform sichtbar ist, bevor du den Screenshot erstellst.
  • Unbekannter Fehler bei der Ausführung: Überprüfe, ob alle Deklarationen richtig sind und dass du die richtige Excel-Version verwendest (z.B. Excel 2010 oder neuer).

Alternative Methoden

Falls du keine VBA-Lösungen verwenden möchtest, kannst du auch manuell Screenshots erstellen:

  • Druck-Taste: Drücke die Druck-Taste auf deiner Tastatur, um einen Screenshot des gesamten Bildschirms zu erstellen. Du kannst diesen dann in eine Bildbearbeitungssoftware (z.B. Paint) einfügen und speichern.
  • Snipping Tool: Verwende das Snipping Tool oder die Snip & Sketch-App in Windows, um bestimmte Bereiche deines Bildschirms zu erfassen und zu speichern.

Praktische Beispiele

Angenommen, du hast eine Userform namens frmAusgaben, und du möchtest einen Screenshot davon machen. Stelle sicher, dass die Userform aktiv ist, wenn du den Screenshot erstellst:

Sub ScreenshotFrmAusgaben()
    frmAusgaben.Show
    Call Screenshot
End Sub

In diesem Beispiel wird die Userform frmAusgaben angezeigt, und dann wird der Screenshot erstellt und gespeichert.


Tipps für Profis

  • Automatisierung: Du kannst die Funktion Screenshot in verschiedene Makros integrieren, um automatisierte Berichte zu erstellen.
  • Formatierung: Experimentiere mit verschiedenen Bildformaten wie PNG oder BMP, um die beste Qualität für deine Screenshots zu erzielen.
  • Fehlerbehandlung: Implementiere Fehlerbehandlungsroutinen in deinen VBA-Code, um unerwartete Fehler abzufangen.

FAQ: Häufige Fragen

1. Frage
Warum wird mein Screenshot nur als leerer Rahmen gespeichert?
Antwort: Stelle sicher, dass die Userform sichtbar ist, wenn du den Screenshot erstellst. Überprüfe auch, ob der richtige Code verwendet wird.

2. Frage
Kann ich den Screenshot auch als PNG speichern?
Antwort: Ja, du kannst das Exportformat in der Export-Methode ändern, indem du FilterName:="PNG" verwendest.

3. Frage
Wie kann ich einen Screenshot von einem bestimmten Bereich des Bildschirms speichern?
Antwort: Dazu musst du die Bildschirmkoordinaten anpassen und eine andere Methode verwenden, um den Screenshot nur von dem gewünschten Bereich zu erstellen.

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