Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen

Screenshot speichern


Betrifft: Screenshot speichern von: Niko
Geschrieben am: 23.09.2019 18:04:41

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

  

Betrifft: AW: Screenshot speichern von: Nepumuk
Geschrieben am: 23.09.2019 19:24:43

Hallo Nico,

in welchen Format?

Gruß
Nepumuk


  

Betrifft: AW: Screenshot speichern von: Niko
Geschrieben am: 23.09.2019 22:45:56

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


  

Betrifft: AW: Screenshot speichern von: Nepumuk
Geschrieben am: 24.09.2019 10:53:25

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


  

Betrifft: AW: Screenshot speichern von: Niko
Geschrieben am: 24.09.2019 11:28:29

Hallo Nepumuk,
vielen Dank für den Code.
Der Screenshot ist perfekt. Allerdings wird nur ein leerer weißer Rahmen gespeichert.
Gruß
Niko


  

Betrifft: AW: Screenshot speichern von: Nepumuk
Geschrieben am: 24.09.2019 11:54:54

Hallo Nico,

kann ich nicht nachvollziehen, bei mir wird der Screenshot gespeichert. Das habe ich natürlich getestet. Welche Excelversion benutzt du?

Gruß
Nepumuk


  

Betrifft: AW: Screenshot speichern von: Niko
Geschrieben am: 24.09.2019 12:14:01

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


  

Betrifft: AW: Screenshot speichern von: Nepumuk
Geschrieben am: 24.09.2019 12:26:13

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


  

Betrifft: AW: Screenshot speichern von: Niko
Geschrieben am: 24.09.2019 12:35:26

Hallo Nepumuk,
wenn ich in der Prozedur F8 drücke, wird Private Sub UserForm_Initialize() - ohne weitere Meldung -gelb markiert!?
Gruß
Niko


  

Betrifft: AW: Screenshot speichern von: Nepumuk
Geschrieben am: 24.09.2019 12:52:10

Hallo Nico,

wird das Userform in meiner Prozedur geladen? Du solltest diese Prozedur ohne Userform mal mit F8 durchsteppen.

Gruß
Nepumuk


  

Betrifft: AW: Screenshot speichern von: Niko
Geschrieben am: 24.09.2019 13:21:48

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


  

Betrifft: AW: Screenshot speichern von: Nepumuk
Geschrieben am: 24.09.2019 14:23:32

Hallo Nico,

kopiere die Prozedur inklusive der API-Deklarationen in ein Standardmodul und teste da.

Gruß
Nepumuk


  

Betrifft: AW: Screenshot speichern von: Niko
Geschrieben am: 24.09.2019 15:09:19

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


  

Betrifft: AW: Screenshot speichern von: Niko
Geschrieben am: 24.09.2019 15:38:07

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


  

Betrifft: AW: Screenshot speichern von: Nepumuk
Geschrieben am: 24.09.2019 17:16:38

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


  

Betrifft: AW: Screenshot speichern von: Niko
Geschrieben am: 24.09.2019 17:33:46

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


  

Betrifft: AW: Screenshot speichern von: Nepumuk
Geschrieben am: 24.09.2019 20:06:30

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


Beiträge aus dem Excel-Forum zum Thema "Screenshot speichern"