Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1792to1796
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
UserForm Bilder laden, Blatt einfügen/lö
24.11.2020 16:20:11
Chris
Hallo zusammen,
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

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: UserForm Bilder laden, Blatt einfügen/lö
24.11.2020 16:35:29
Nepumuk
Hallo Chris,
einfach so:
If Not Image1.Picture is Nothing Then ' Bild geladen

Gruß
Nepumuk
AW: UserForm Bilder laden, Blatt einfügen/lö
24.11.2020 17:31:59
Chris
Hi Nepumuk,
vielen Dank für die Antwort. Funktioniert wunderbar!!!
Eine Frage hätte ich noch:
Ich möchte die Bilder über einen Command Button aus dem Tabellenblatt wieder löschen.
Wenn ich keine Bilder oder nur ein oder zwei Bilder eingefügt habe, erhalte ich eine Fehlermeldung.
Welche Anweisung benötige ich, dass erst geprüft wird ob Picture 3, Picture 4 und Picture 5 vorhanden ist und dann die entsprechenden Bilder löscht oder halt nicht?
Mein bisheriger Code:
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 und beste Grüße
Chris
Anzeige
AW: UserForm Bilder laden, Blatt einfügen/lö
24.11.2020 17:35:06
Nepumuk
Hallo Chris,
siehe meine zweite Antwort.
Gruß
Nepumuk
AW: UserForm Bilder laden, Blatt einfügen/lö
24.11.2020 17:06:32
Nepumuk
Hallo nochmal,
das löschen von Bildern habe ich übersehen.
So werden alle Bilder gelöscht:
Sub Delete()
    
    Dim objShape As Shape
    
    For Each objShape In Worksheets("Tabelle1").Shapes
        
        If objShape.Type = msoPicture Then Call objShape.Delete
        
    Next
End Sub

Gruß
Nepumuk
Anzeige
AW: UserForm Bilder laden, Blatt einfügen/lö
24.11.2020 23:22:22
Chris
Hi Nepumuk,
danke für die 2. Antwort.
Der Code löscht alle Bilder in meinem Tabellenblatt.
Ich habe vergessen zu erwähnen, dass ich 2 Bilder (Picture 1, Picture 2) in dem Tabellenblatt habe, die permanent erhalten bleiben sollen und nur die Bilder (Picture 3, Picture 4, Picture 5) gelöscht werden sollen, falls vorhanden.
Wie müsste dein Code dementsprechend angepasst werden?
Vielen Dank und beste Grüße
Chris
AW: UserForm Bilder laden, Blatt einfügen/lö
25.11.2020 10:15:36
Nepumuk
Hallo Chris,
so besser?
Sub Delete()
    
    Dim objShape As Shape
    
    For Each objShape In Worksheets("Tabelle1").Shapes
        
        With objShape
            
            If .Type = msoPicture Then If .Name <> "Picture 1" And .Name <> "Picture 2" Then Call .Delete
            
        End With
    Next
End Sub

Gruß
Nepumuk
Anzeige
AW: UserForm Bilder laden, Blatt einfügen/lö
25.11.2020 12:46:13
Chris
Hi Nepumuk,
vielen Dank. Funktioniert perfekt!
Beste Grüße
Chris

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige