Bildschirmausschnitt vom Clipboard speichern
Schritt-für-Schritt-Anleitung
Um ein Bildschirmausschnitt vom Clipboard in Excel zu speichern, kannst du folgenden VBA-Code verwenden. Dieser speichert ein Bild aus der Zwischenablage direkt als Datei auf deiner Festplatte.
- Öffne Excel und drücke
ALT + F11
, um den VBA-Editor zu öffnen.
- Füge ein neues Modul hinzu: Klicke auf
Einfügen
> Modul
.
- Kopiere den folgenden Code in das Modul:
Option Explicit
Private Declare Function OleCreatePictureIndirect Lib "olepro32.dll" ( _
ByRef PicDesc As PIC_DESC, _
ByRef RefIID As GUID, _
ByVal fPictureOwnsHandle As Long, _
ByRef IPic As IPictureDisp) As Long
Private Declare Function CopyImage Lib "user32.dll" ( _
ByVal handle As Long, _
ByVal un1 As Long, _
ByVal n1 As Long, _
ByVal n2 As Long, _
ByVal un2 As Long) As Long
Private Declare Function IsClipboardFormatAvailable Lib "user32.dll" ( _
ByVal wFormat As Integer) As Long
Private Declare Function OpenClipboard Lib "user32.dll" ( _
ByVal hWnd As Long) As Long
Private Declare Function GetClipboardData Lib "user32.dll" ( _
ByVal wFormat As Integer) As Long
Private Declare Function CloseClipboard Lib "user32.dll" () As Long
Private Type GUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(0 To 7) As Byte
End Type
Private Type PIC_DESC
lngSize As Long
lngType As Long
lnghPic As Long
lnghPal As Long
End Type
Private Const PICTYPE_BITMAP = 1
Private Const CF_BITMAP = 2
Private Const IMAGE_BITMAP = 0
Private Const LR_COPYRETURNORG = &H4
Private Function Paste_Picture() As IPictureDisp
Dim lngReturn As Long, lngCopy As Long, lngPointer As Long
If IsClipboardFormatAvailable(CF_BITMAP) <> 0 Then
lngReturn = OpenClipboard(Application.hWnd)
If lngReturn > 0 Then
lngPointer = GetClipboardData(CF_BITMAP)
lngCopy = CopyImage(lngPointer, IMAGE_BITMAP, 0, 0, LR_COPYRETURNORG)
Call CloseClipboard
If lngPointer <> 0 Then Set Paste_Picture = Create_Picture(lngCopy, 0&)
End If
End If
End Function
Private Function Create_Picture( _
ByVal lnghPic As Long, _
ByVal lnghPal As Long) As IPictureDisp
Dim udtPicInfo As PIC_DESC, udtID_IDispatch As GUID
Dim objPicture As IPictureDisp
With udtID_IDispatch
.Data1 = &H20400
.Data4(0) = &HC0
.Data4(7) = &H46
End With
With udtPicInfo
.lngSize = Len(udtPicInfo)
.lngType = PICTYPE_BITMAP
.lnghPic = lnghPic
.lnghPal = lnghPal
End With
Call OleCreatePictureIndirect(udtPicInfo, udtID_IDispatch, 0&, objPicture)
Set Create_Picture = objPicture
End Function
Public Sub Save_Picture()
Dim objPicture As IPictureDisp
Set objPicture = Paste_Picture
If Not objPicture Is Nothing Then
Call stdole.StdFunctions.SavePicture(objPicture, "C:\Test.bmp")
Else
MsgBox "Picture can't be saved", vbCritical, "File Error"
End If
End Sub
- Schließe den VBA-Editor und kehre zu Excel zurück.
- Führe das Makro
Save_Picture
aus, um das Bild aus der Zwischenablage zu speichern.
Häufige Fehler und Lösungen
-
Fehler: „Picture can't be saved“
Mögliche Ursache: Es befindet sich kein Bild in der Zwischenablage. Stelle sicher, dass du zuerst einen Bildschirmausschnitt erstellt hast.
-
Fehler: Bild wird nicht gespeichert
Überprüfe den Speicherort (z.B. C:\Test.bmp
). Stelle sicher, dass dieser Pfad existiert und du die erforderlichen Berechtigungen hast.
Alternative Methoden
Wenn VBA nicht die gewünschte Lösung bietet, kannst du auch folgende Methoden nutzen:
- Snipping Tool: Nutze das Snipping Tool in Windows, um Screenshots zu erstellen und manuell zu speichern.
- Drittanbieter-Software: Es gibt verschiedene Programme, die speziell für das Speichern von Screenshots entwickelt wurden, z.B. Greenshot oder ShareX.
Praktische Beispiele
-
Speichern als JPG: Um ein Bild aus der Zwischenablage als JPG zu speichern, musst du eine externe Bibliothek verwenden, die das Bildformat unterstützt. Der oben angegebene VBA-Code speichert standardmäßig als BMP.
-
Größe des Bildes in Zelle A1 speichern: Ergänze den Code um folgende Zeile nach dem Speichern des Bildes:
Tabelle1.Cells(1, 1).Value = FileLen("C:\Test.bmp")
Damit wird die Dateigröße in Bytes in die Zelle A1 geschrieben.
Tipps für Profis
-
Optimierung der Bildgröße: Überlege, ob du das Bildkompressionsformat (z.B. JPG) nutzen möchtest, um Speicherplatz zu sparen. Das erfordert zusätzliche Programmierung oder die Nutzung von externen DLLs.
-
Automatisierung: Du kannst die Speicherung von Bildern aus der Zwischenablage automatisieren, indem du das Makro in regelmäßigen Abständen ausführst.
FAQ: Häufige Fragen
1. Kann ich das Bild auch in einem anderen Format speichern?
Ja, das Standardformat ist BMP. Um in ein anderes Format zu speichern, benötigst du zusätzliche Bibliotheken oder Tools.
2. Wie kann ich die Größe des gespeicherten Bildes anpassen?
Das Bild wird im Originalformat gespeichert. Um die Größe zu ändern, musst du das Bild nach dem Speichern mit einer Bildbearbeitungssoftware bearbeiten oder entsprechende Programmierung in VBA hinzufügen.
3. Ist die Nutzung von VBA sicher?
Ja, solange du VBA-Code von vertrauenswürdigen Quellen verwendest. Achte darauf, beim Download von externem Code vorsichtig zu sein.