Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1752to1756
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
Bilder in Userform anzeigen,
20.04.2020 10:43:57
cfs73
Hallo,
ich weiß es gibt zig Themen im Netz, aber meine Kenntnisse in Umgang VBA sind noch bescheiden das passende habe ich nicht gefunden.
Ich erkläre mal was ich möchte:
Die Exceldatei liegt mit den Bildern im selben Ordner. Die Bilder sind von 1 bis 20 z. B. nummeriert (Bild1.jpg, Bild2.jpg ...)
Wenn ich nun in der Userform bin, dann gibt es ein Textbox2 in dem die Produktnummern angezeigt werden, die sich ändern können und das automatisch. Dazu gibt es ein Images1.Picture, in dem die Bilder automatisch angezeigt werden.
Nun wähle ich ein Produkt in der Userorm aus und die Daten zum Produkt werden in Textboxen geladen und in der Textbox2 erscheint automatisch z.B. die Nr. 3 zum Produkt, dann soll automatisch in der Images1.Picture das Bild3.jpg angezeigt werden usw. Also, wenn sich dann die Nr. in der Textbox2 ändert, dann das Bild dazu laden.
Hat jemand einen Ansatz für mich?
Gruß Carsten

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bilder in Userform anzeigen,
20.04.2020 11:03:23
volti
Hi Carsten,
hier ein möglicher Ansatz zur Ansicht, den Du entweder selbst modifizierst und einbaust oder Du lädt hier noch die entsprechenden Dateien hoch....
Das u.a. Tool ermittelt das Bild der angegebenen Zeile und kopiert es in die Userform.Image1.

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 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 Type PIC_DESC
   lSize As Long
   lType As Long
   hPic  As LongPtr
   hPal  As LongPtr
End Type
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 Test()
  CopyPictureFromPosition 1
  Paste_Picture_inUF
End Sub
Function CopyPictureFromPosition(iZeile As Long) As Boolean
'Ermittelt das Bild, dass an der angegebenen Zeile zu finden ist
'und kopiert es in die Zwischenablage
 Dim oShape As Shape
 With ThisWorkbook.Sheets("Sternzeichen")
   For Each oShape In .Shapes
     If oShape.TopLeftCell.Address = .Cells(iZeile, "C").Address Then
        oShape.CopyPicture Appearance:=xlScreen, Format:=xlBitmap
        CopyPictureFromPosition = True
        DoEvents
        Exit For
     End If
   Next oShape
 End With
End Function
Sub Paste_Picture_inUF()
'Holt ein Bild aus der Zwischenablage und fügt in die Userform ein
 Dim oPict As IPictureDisp
 Dim hPic  As LongPtr, hCopy As LongPtr
 If IsClipboardFormatAvailable(CF_BITMAP) <> 0 Then
    If OpenClipboard(0&) <> 0 Then
       hPic = GetClipboardData(CF_BITMAP)
       hCopy = CopyImage(hPic, IMAGE_BITMAP, 0, 0, LR_COPYRETURNORG)
       CloseClipboard
       If hPic <> 0 Then Set oPict = Create_Picture(hCopy)
        If Not oPict Is Nothing Then
           UserForm1.Image1.Picture = oPict 'Bild in Userform einfügen
        Else
           MsgBox "Ds Bild kann nicht angezeigt werden", vbCritical, "Bild einfügen"
        End If
    End If
 End If
 UserForm1.Show
End Sub
Private Function Create_Picture( _
        ByVal hPic As LongPtr) As IPictureDisp
 Dim tPicInfo As PIC_DESC, tID_IDispatch As GUID
 Dim oPict As IPictureDisp
 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
 Set Create_Picture = oPict
End Function

viele Grüße
Karl-Heinz

Anzeige
AW: Bilder in Userform anzeigen,
20.04.2020 11:17:30
cfs73
Vielen Dank,
aber das glaube hilft mir noch nicht so richtig weiter. Ich glaube dazu sind meine Kenntnisse doch noch zu gering das alles zu verstehen.
Schaue es mir noch genauer an
AW: Bilder in Userform anzeigen,
20.04.2020 11:27:29
Nepumuk
Hallo Carsten,
teste mal:
Private Sub TextBox2_Change()
    Dim strPicturename As String
    strPicturename = ThisWorkbook.Path & "\" & "Bild" & TextBox2.Text & ".jpg"
    If Dir$(strPicturename) <> vbNullString Then
        Set Image1.Picture = LoadPicture(Filename:=strPicturename)
    Else
        Set Image1.Picture = Nothing
    End If
End Sub

Gruß
Nepumuk
Anzeige
AW: Bilder in Userform anzeigen,
20.04.2020 11:54:36
cfs73
Hallo,
das geht schon in die richtige Richtung, aber noch klappt es bei mir noch nicht, obwohl ich die Bilder mit der gleichen Nummer bezeichnet habe, wie die Produktnummer. Rufe ich ich ein Produkt mit der Nr. 3 in der Userform Textbox2 auf, sollte doch dann das Bild3.jpg angezeigt werden.
Danke für die Anregung
AW: Bilder in Userform anzeigen,
20.04.2020 12:08:10
Nepumuk
Hallo Carsten,
kann ich nicht nachvollziehen. Bei mir klappt das. Stimmt denn die Endung .jpg mit der deiner Bilder überein?
Gruß
Nepumuk
AW: Bilder in Userform anzeigen,
20.04.2020 14:44:41
cfs73
Vielleicht stelle ich mich auch etwas umständlich an, da es neu für mich ist. Vielleicht habe ich den Pfad nicht richtig angeben und muss ich die Bilder, dann "1.jpg" nennen?
Anzeige
AW: Bilder in Userform anzeigen,
20.04.2020 15:03:31
Nepumuk
Hallo Carsten,
du musst die Bilder nicht umbenennen, sie müssen nur den selben Grundnamen haben, und sie müssen sich im selben Ordner befinden wie die Mappe. Teste mal meine Mappe:
https://www.herber.de/bbs/user/136892.zip
Du brauchst nur 3 in die TextBox eingeben, dann sollte das Bild angezeigt werden.
Gruß
Nepumuk
AW: Bilder in Userform anzeigen,
20.04.2020 16:57:23
cfs73
Hallo Nepumuk,
Vielen Dank für die Hilfe. Nun hat es klappt, woran es lag weiß ich nicht. Eine Nachfrage hätte ich noch. Wie kann ich es hinbekommen, das die Bilder in Zoom sich an den Image Picture anpassen?
z.B. mit
.PictureSizeMode = fmPictureSizeModeZoom ?
Gruß
Anzeige
AW: Bilder in Userform anzeigen,
20.04.2020 17:10:47
Nepumuk
Hallo Carsten,
das kannst du im Eigenschaftsfenster fest einstellen.
Userbild
Gruß
Nepumuk
AW: Bilder in Userform anzeigen,
20.04.2020 21:16:13
cfs73
Vielen Dank, so einfach kann es sein!
Schönen Abend noch
AW: Bilder in Userform anzeigen,
20.04.2020 21:33:50
cfs73
Entschuldige, aber ich habe noch eine kurze und letzte Frage. Geht es eigentlich auch, das man ein Image.Picture über einen Button auch speichern kann in einen Ordner wo die Excel Datei liegt?
AW: Bilder in Userform anzeigen,
21.04.2020 03:46:17
Nepumuk
Hallo Carsten,
ja das geht, aber nur als .bmp
Private Sub CommandButton1_Click()
    Call SavePicture(Picture:=Image1.Picture, Filename:=ThisWorkbook.Path & "\Bild.bmp")
End Sub

Zur Not kann ich es aber per WIA auch in ein .jpg umwandeln.
Gruß
Nepumuk
Anzeige
AW: Bilder in Userform anzeigen,
21.04.2020 07:58:49
cfs73
Guten Morgen,
ok, wieder was gelernt. Ich habe es aber mal mit jpg propiert und das macht er auch.
Danke für die Hilfe!
Gruß
AW: Bilder in Userform anzeigen,
21.04.2020 08:04:30
Nepumuk
Hallo Carsten,
damit speicherst du aber ein BMP mit der Endung .jpg.
Gruß
Nepumuk

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige