Bild aus Tabelle in Userform anzeigen
#1
Hallo liebe Excel-Profis,

leider schaffe ich es einfach nicht, ein Bild aus einer Excel Tabelle in einem Userform anzuzeigen.

Leider konnte ich trotz langer suche bis jetzt nichts finden, das mir weiter hilft.

Mit folgendem Code klappt es wunderbar ein Bild aus einem lokalen Verzeichnis in einem Userform anzuzeigen.

Code:
Private Sub Userform_Initialize()

Image1.Picture = LoadPicture("C:\Users\Public\Pictures\Sample Pictures\Chrysanthemum.jpg")

End Sub

Wie muss ich den Code umschreiben, dass er ein bestehendes Bild (z.B. "Grafik 4") aus "Tabelle 1" in dem Userform anzeigt?
Geht das überhaupt?

Liebe Grüße
Dominik
Antworten Top
#2
Hallo Dominik,

Du müsstest den Umweg gehen und erst das Bild speichern und dann laden.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#3
Hallo schauan,

gibt es wirklich keine Möglichkeit?

Das mit dem lokalen speichern ist leider keine Option, da wir das Dokument aus unserem DMS (Dokumentenmanagement-System) laden.

Anwendung:
Es handelt sich um eine Art "Prozess-Entwicklungslaufzettel", auf dem sämtliche Schritte der Entwicklung von Produkten und deren Prozesse dokumentiert werden.
D.h. es werden mehrere Arbeitsschritte abgebildet und bewertet. Zur Bewertung werden auch Fotos zur Veranschaulichung mit eingebunden.

Derzeitige Situation:
Die Fotos werden in eine extra Tabelle geladen (skaliert auf 320px * 240px) und dann in die Bewertung in einer anderen Tabelle (selbe Excelfile) als "Thumbnail" eingebunden (copy - paste inkl. skalierung an die  Zellengröße), damit das Dokument übersichtlich bleibt.
Wenn man mit der Maus über die Zelle fährt, wird das Bild in voller Größe angezeit (Bild über Makro in Kommentar), quasi ein Mouse-Over-Effekt.

Jetzt das Problem:
Das Bild wird Quasi zwei mal "in groß" eingebunden = doppelte Datengröße. (einmal extra Tabelle, einmal Kommentar)

Ziel:
Um die Datengröße der Excel-Datei klein zu halten, war mein Gedanke der, das Bild bei Mouseover über das Thumbnail in einer Userform anzuzeigen (geladen aus der extra Tabelle).
Dann müsste das Bild nicht doppelt in der Excel-Datei eingebunden werden.


Hat von Euch wer eine Idee, wie ich das sonst realisieren könnte?

Grüße
Dominik
Antworten Top
#4
Hallo Dominik,

es gibt da lediglich die Möglichkeit mit Hilfe von API's, ist aber sehr umfangreich. Du kennst Dich mit VBA gut aus?
Schaue Dir mal dazu diesen Beitrag an:

Dateiupload bitte im Forum! So geht es: Klick mich!

Du müsstest unter anderem erst mal das Private Sub cmdNeueDatei_Click() überarbeiten, da Du das Bild schon in Deiner Datei hast und da Du ein bestimmtes verarbeiten willst.

Ich habe das Beispiel mal in eine Datei gepackt und hier angehängt.


Angehängte Dateien
.xlsm   BilderrahmenClipboard.xlsm (Größe: 27,03 KB / Downloads: 64)
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#5
Hallo schauan,

vielen Dank! Sieht schon mal nicht schlecht aus. Es geht also doch, bestehende Bilder aus einer Tabelle anzeigen zu lassen.

Das Private Sub cmdNeueDatei_Click() war schnell so angepasst, dass immer das aktuelle Workbook als Basis dient.

Interessant wird jetzt nur wie ich es anstelle, das immer das Bild geladen wird, das angeklickt wird (bzw. MouseOver).
D.h. das Auswahlfeld soll gar nicht erst kommen.


Meine VBA Kenntnisse würde ich als "fortgeschrittenen Anfänger" beschreiben. Aber ich lerne jeden Tag dazu.. Wink

Grüße
Dominik
Antworten Top
#6
Code:
Sub M_snb()
   c00 = "G:\OF\foto.gif"
   
   Sheet1.ChartObjects(1).Chart.Export c00, "GIF"
   ThisWorkbook.VBProject.VBComponents("Userform1").Designer.Controls("Frame1").Picture = LoadPicture(c00)
End Sub

Anpassen:


- G:\OF\Foto.gif muss ein gültiges Pfad und Dateiname sein
- es gibt ein Grafik im Arbeitsblatt Sheet1 (Tabelle1)
- es muss ein Userform1 geben in der Datei
- Userform1 muss ein "Frame1' enthalten
Antworten Top
#7
Hallöchen,

ich machs mal scheibchenweise, weiß nicht, wie weit ich in den nächsten 15 Minuten noch komme .... Testen tu ich alles jedoch erst am Ende, schlimmstenfalls erst morgen.. Sad

Kurzversion des Makro's, wo die Datei geöffnet wird. Das Bild muss sich hie rauf dem aktiven Blatt befinden.
MouseOver oder zumindest Klick geht eventuell mit Klassenprogrammierung, jetzt arbeite ich aber erst mal an der "Knopfdruckversion"

Code:
Private Sub cmdNeueDatei_Click()
On Error Resume Next
' Bildschirmaktualisierung ausschalten
Application.ScreenUpdating = False
' Das erste Bild auf Blatt 1 des aktiven
' Workbooks ins Clipboard bringen
If BringPictureToClip(ActiveSheet.Name) = "" Then
  MsgBox "Kein Bild auf Blatt 1"
Else
  Me.Caption = ActiveWindow.Caption
  ' Bild aus dem Clipboard in das Rahmenfeld
  ClipboardToPicture
End If
' Bildschirmaktualisierung einschalten
Application.ScreenUpdating = True
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#8
Hallöchen,

hier ist jetzt die andere "Scheibe". Übernommen wird nun das angeklickte Bild. Ist keins angeklickt, kommt die Meldung.
Man kann jetzt noch aus dem ersten Makro die Übergabe des Blattnamens wegnehmen und dann hier in der Funktionsdefinition den Ausdruck "strSheetname As String"
... un ddie Meldung anpassen, wenn kein Bild angeklickt ist Smile

Code:
Private Function BringPictureToClip(strSheetname As String) As String
On Error GoTo fehlerbehandlung
' Alle Shapes des Blattes durchsuchen
If Selection.ShapeRange.Type = msoPicture Then
    ' Handelt es sich um die gesuchte Bildnummer
    ' ins Clipboard kopieren
    Selection.CopyPicture _
    Appearance:=xlScreen, Format:=xlBitmap
    ' Namen des kopierten Bildes zurückgeben
    BringPictureToClip = Selection.ShapeRange.Name
End If
fehlerbehandlung:
End Function
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste