- Startseite
- Neuigkeiten
- Über mich
- Referenzen
- Beispiele
- Artikel
- Vorträge
- Tools
- Access-Tipps
- Excel-Tipps
- Spielereien
- Kontakt
- Impressum
- Datenschutz
Meine Projekte:
Bildschirmfotos mit VBA und dem Snipping Tool
Mit dieser Musteranwendung erstellen Sie direkt aus Access (analog auch aus Excel oder Word) heraus Bildschirmfotos eines frei wählbaren rechteckigen Ausschnitts, speichern diese in einer Datei und zeigen sie an. So können Sie beispielweise auch Bilder von Programmen oder Webseiten speichern, die keinen Grafikexport anbieten.
Und wenn Ihnen langweilig ist, können Sie mit ein paar kleinen Code-Änderungen auch Bildschirmfotos wie das obige machen ;-).
Snipping Tool
Um Bildschirmfotos aufzunehmen, wird das in Windows eingebaute Snipping Tool mit dem Paramter /clip gestartet. Und zwar über das WshShell-Object, damit der VBA-Code bis zur Beendigung des aufgerufenen Programms wartet. Damit das Access-Programmfenster nicht im Weg ist, wird es vor dem Aufruf minimiert und danach wieder angezeigt.
Etwas problematisch ist es, den Pfad zum Tool zu finden, da dieser bei jeder Windows-Version unterscheidlich ist. Im Code werden vier Pfade ausprobiert, in denen das Programm liegen könnte. In Windows 11 habe ich festgestellt, dass das Snipping Tool nicht auf den Parameter /clip reagiert. Dort muss man nach dem manuellen Start der Bildschirmaufnahme das Snipping Tool selbst wieder beenden, damit Access die Steuerung zurückerhält und das Bild abgespeichert werden kann.
Zwischenablage speichern
In den Tiefen des Internets habe ich den VBA-Code gefunden, der ein Bild aus der Zwischenablage in eine Datei speichert. Mit einer Zeile Code ist der Aufruf der Funktion in meiner Prozedur erledigt. Der Code stammt zwar von 1998, wurde aber schon irgendwann einmal auf 64-bit angepasst. Das Modul konnte ich fast unverändert übernehmen. Danke an Steve Bullen und alle anderen genannten und ungenannten Autoren.
Bild anzeigen
Das Anzeigen einer gespeicherten Bilddatei im Formular ist dann der einfachste Teil der Aufgabe. Passen Sie in Ihrer Anwendung einfach den Code zum Erstellen des Bildpfads an oder verschieben Sie die Bilddatei mit der MoveFile-Methode an die gewünschte Stelle, bevor Sie diese anzeigen.
Code-Schnipsel
Private Sub cmdScreenshot_Click() '-------------------------------------------------------------------------------- ' Autor: Raphael Hein - www.datenbankmanufaktur.de ' Datum: 26.03.2024 ' ' Benötigt: modImageProcess '-------------------------------------------------------------------------------- Dim sSnip As String ' Pfad zum Snipping Tool Dim sBild As String ' Pfad zum Bild Dim wsh As Object ' Shell-Object Dim fso As Object ' FileSystem-Object Set wsh = VBA.CreateObject("WScript.Shell") Set fso = CreateObject("Scripting.FileSystemObject") ' die bekannten Pfade ausprobieren, bis die Datei gefunden ist On Error Resume Next ' Fehler übergehen sSnip = fso.GetFile(wsh.ExpandEnvironmentStrings("%windir%\System32\SnippingTool.exe")) If sSnip = "" Then sSnip = fso.GetFile(wsh.ExpandEnvironmentStrings("%windir%\SysWOW64\SnippingTool.exe")) If sSnip = "" Then sSnip = fso.GetFile(wsh.ExpandEnvironmentStrings("%windir%\Sysnative\SnippingTool.exe")) If sSnip = "" Then sSnip = fso.GetFile(wsh.ExpandEnvironmentStrings("%userprofile%\AppData\Local\Microsoft\WindowsApps\SnippingTool.exe")) On Error GoTo 0 ' Fehler wieder anzeigen If sSnip = "" Then MsgBox "Das Snipping Tool wurde nicht gefunden und kann nicht gestartet werden.", vbExclamation, "acScreenshot" Exit Sub End If ' Access-Programmfenster minimieren, damit es nicht im Weg ist DoCmd.RunCommand acCmdAppMinimize ' vorhandene Bild entfernen Me!imgScreenshot.Picture = "" ' Bildpfad festlegen sBild = CurrentProject.Path & "\Screenshot.png" ' Screenshot mit dem Snipping-Tool aufnehmen und auf das Ende des Prozesses warten wsh.Run Chr(34) & sSnip & Chr(34) & " /clip", 1, True ' Access-Programmfenster wieder anzeigen DoCmd.RunCommand acCmdAppRestore ' Zwischenablage in Bildpfad abspeichern Call SaveClip2Bit(sBild) ' Screenshot anzeigen Me!txtBild = sBild Me!imgScreenshot.Picture = sBild End Sub
Der wesentliche Teil des Codes funktioniert auch in Excel und Word (nur für Windows). Das Modul und der Code des Formulars sind im Download als Textdateien zum Kopieren in Ihre Anwendung enthalten.
Download
acScreenshot für Access, Excel und Word
(Datei: acScreenshot.zip, ca. 40 KB)
Bitte denken Sie daran, dass Sie die Datei(en) nach dem Download Zulassen müssen.
Hier steht, warum und wie.
