ich benötige eure Hilfe bezüglich UserFormen und Bildern einfügen.
Ich habe eine UserForm erstellt in die ich Bilder lade. Wenn ich in den Image-Rahmen in der UserForm klicke, öffnet sich der Explorer und ich kann das Bild auswählen. Ich habe 3 solcher Rahmen, um 3 verschiedene Bilder einzufügen. In der UserForm können noch andere Daten eingegeben werden. Dies ist hier aber nicht relevant.
Die Daten in der UserForm inklusive Bilder werden in eine Excel Tabelle geladen. Wenn ich keine Bilder oder auch nur 1/2 statt 3 Bilder nicht in die UserForm lade erhalte ich eine Fehlermeldung in dem Bild einfügen Code. Da ich nicht in jedem Fall Bilder in die UserForm lade, benötige ich eine If-Anweisung um diesen Fehler zu umgehen.
Hier seht ihr den Code, wie ich die Bilder in die UserForm lade (habe ich so viel ich weiß aus diesem Forum von Nepumuk):
Private Declare Function CopyImage Lib "user32.dll" ( _
ByVal handle As Long, _
ByVal imageType As Long, _
ByVal newWidth As Long, _
ByVal newHeight As Long, _
ByVal lFlags As Long) As Long
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Declare Function OpenClipboard Lib "user32.dll" ( _
ByVal hwnd As Long) As Long
Private Declare Function EmptyClipboard Lib "user32.dll" () As Long
Private Declare Function CloseClipboard Lib "user32.dll" () As Long
Private Declare Function SetClipboardData Lib "user32.dll" ( _
ByVal wFormat As Long, _
ByVal hMem As Long) As Long
Private Declare Function DeleteObject Lib "gdi32.dll" ( _
ByVal hObject As Long) As Long
Private Const IMAGE_BITMAP = 0&
Private Const LR_COPYRETURNORG = &H4
Private Const CF_BITMAP = 2&
Private Sub Image1_Click()
Dim strPfad As String
Dim varAuswahl As Variant
'Start-Verzeichnis für die ins Image zu ladenden Bildern
strPfad = ThisWorkbook.Path & Application.PathSeparator & "Bilder"
With Application.FileDialog(msoFileDialogOpen)
.Title = "Bitte Bild für Userform auswählen"
.InitialFileName = strPfad & Application.PathSeparator
If .Show = -1 Then
varAuswahl = .SelectedItems(1)
Me.Image1.Picture = LoadPicture(varAuswahl)
Else
End If
End With
End Sub
Und mit diesem Code füge ich die Bilder in das Tabellenblatt ein (habe ich so viel ich weiß aus diesem Forum von Nepumuk):
Dim lngTempPicture As Long
lngTempPicture = CopyImage(Me.Image1.Picture, _
IMAGE_BITMAP, 0, 0, LR_COPYRETURNORG)
If lngTempPicture 0 Then
Call OpenClipboard(Application.hwnd)
Call EmptyClipboard
Call SetClipboardData(CF_BITMAP, lngTempPicture)
Call CloseClipboard
Call DeleteObject(lngTempPicture)
Worksheets("Angebot").Paste
With Worksheets("Tabelle1")
Selection.Cut
Range("A51").Select
ActiveSheet.Paste
End With
End If
Außerdem habe ich einen Button mit dem ich alle Inhalte (auch die Bilder) lösche. Ich erhalte eine Fehlermeldung, wenn ich die Inhalte lösche, aber kein/e Bild/er eingefügt habe.
Was für eine Anweisung benötige ich, damit erst geprüft wird, ob das/die Bild/er (Bildnamen: Picture 3, Picture 4, Picture 5) vorhanden ist/sind. Wenn das/die Bild/er nicht vorhanden ist/sind, soll nichts passieren. Wenn das/die Bilder vorhanden ist/sind, soll/en diese/s entfernt werden.
Sub Delete()
With Worksheets("Tabelle1")
ActiveSheet.Shapes.Range(Array("Picture 3")).Select
Selection.Delete
ActiveSheet.Shapes.Range(Array("Picture 4")).Select
Selection.Delete
ActiveSheet.Shapes.Range(Array("Picture 5")).Select
Selection.Delete
Range("A1").Select
End With
End Sub
Vielen Dank im Voraus.
Beste Grüße