Option
Explicit
Private
Declare
PtrSafe
Function
OleCreatePictureIndirect
Lib
"oleaut32.dll"
( _
ByRef
PicDesc
As
PIC_DESC,
ByRef
RefIID
As
GUID, _
ByVal
fPictureOwnsHandle
As
LongPtr,
ByRef
IPic
As
IPictureDisp)
As
Long
Private
Declare
PtrSafe
Function
CopyImage
Lib
"user32"
( _
ByVal
handle
As
LongPtr,
ByVal
un1
As
Long
,
ByVal
n1
As
Long
, _
ByVal
n2
As
Long
,
ByVal
un2
As
Long
)
As
LongPtr
Private
Declare
PtrSafe
Function
IsClipboardFormatAvailable
Lib
"user32"
( _
ByVal
wFormat
As
Long
)
As
Long
Private
Declare
PtrSafe
Function
SetClipboardData
Lib
"user32"
(
ByVal
wFormat
As
Long
, _
ByVal
hMem
As
LongPtr)
As
LongPtr
Private
Declare
PtrSafe
Function
GetClipboardData
Lib
"user32"
( _
ByVal
wFormat
As
Long
)
As
LongPtr
Private
Declare
PtrSafe
Function
OpenClipboard
Lib
"user32"
( _
ByVal
hWnd
As
LongPtr)
As
Long
Private
Declare
PtrSafe
Function
CloseClipboard
Lib
"user32"
()
As
Long
Private
Declare
PtrSafe
Function
EmptyClipboard
Lib
"user32"
()
As
Long
Private
Declare
PtrSafe
Function
RegisterClipboardFormat
Lib
"user32"
_
Alias
"RegisterClipboardFormatA"
(
ByVal
lpString
As
String
)
As
Long
Private
Type PIC_DESC
lSize
As
Long
lType
As
Long
hPic
As
LongPtr
hPal
As
LongPtr
End
Type
Dim
hPic
As
LongPtr
Private
Type GUID
Data1
As
Long
Data2
As
Integer
Data3
As
Integer
Data4(0
To
7)
As
Byte
End
Type
Private
Const
PICTYPE_BITMAP = 1
Private
Const
CF_BITMAP = 2
Private
Const
IMAGE_BITMAP = 0
Private
Const
LR_COPYRETURNORG = &H4
Sub
Paste_Picture_ByName(sSuch
As
String
)
Dim
oPict
As
IPictureDisp, oShape
As
Shape
Dim
tPicInfo
As
PIC_DESC, tID_IDispatch
As
GUID
With
ThisWorkbook.Sheets(
"Tabelle2"
)
For
Each
oShape
In
.Shapes
If
oShape.Name
Like
sSuch &
"*"
Then
oShape.CopyPicture Appearance:=xlScreen, Format:=xlBitmap
DoEvents:
Exit
For
End
If
Next
oShape
End
With
If
IsClipboardFormatAvailable(CF_BITMAP) <> 0
Then
If
OpenClipboard(0&) <> 0
Then
hPic = CopyImage(GetClipboardData(CF_BITMAP), _
IMAGE_BITMAP, 0, 0, LR_COPYRETURNORG)
CloseClipboard
If
hPic <> 0
Then
With
tID_IDispatch
.Data1 = &H20400
.Data4(0) = &HC0
.Data4(7) = &H46
End
With
With
tPicInfo
.lSize = Len(tPicInfo)
.lType = PICTYPE_BITMAP
.hPic = hPic
.hPal = 0
End
With
OleCreatePictureIndirect tPicInfo, tID_IDispatch, 0&, oPict
If
Not
oPict
Is
Nothing
Then
UserForm1.Image3.Picture = oPict
Else
MsgBox
"Das Bild kann nicht angezeigt werden"
, vbCritical,
"Bild einfügen"
End
If
End
If
End
If
End
If
End
Sub
Sub
test()
Paste_Picture_ByName
"Löwe"
UserForm1.Show
End
Sub