Bild aus Tabelle direkt in Userform / Image-Objekt einfügen
#1
Hallöchen,

ich hätte da mal ein Problem Wink

Ich möchte, wie im Betreff genannt, ein Bild aus einer Tabelle in ein Userform einfügen - direkt, ohne den Zwischenschritt des Speichern in eine Datei usw.
Mit entsprechender API funktioniert das zuweilen, aber eben leider nicht immer.

In meinem Testfile habe ich ein Userform mit einem Image-Objekt. Der Code soll das Bild aus Tabelle1 nun in beides einfügen, am wichtigsten für mich ist eigentlich nur in das Image-Objekt. Nur zum Test hole ich es auch ins UF. Ich bekomme nun verschiedene Ergebnisse - im Prinzip alle möglichen Varianten.

Eingefügt wird bei mehrmaliger Ausführung:

nix
oder
ins UF
oder
ins Image
oder
in beides

Mein Wunsch wäre was "direkt" verlässliches Wink

Das Problem scheint am Kopieren / Zwischenspeicher zu liegen - die Prüfung findet nix:

'Only Continue if we have a handle on the Picture
If lPicHandle <> 0 Then

Edit:
Das Problem scheint am Erzeugen des Bildes zu liegen - die folgende Prüfung findet was <> 0:

'Create the IPicture Object
lOLEHandle = OleCreatePictureIndirect(uPictureInfo, uInterGUID, True, iTempPicture)
If lOLEHandle = 0 Then
...

Ein
Debug.Print lOLEHandle
bringt -2147467259

Im Zwischenspeicher ist das Bild aber. Wenn ich als Ergebnis ein leeres UF bekomme und nach Schließen des UF mit CTRG-V einfüge, bekomme ich die Kopie ins Blatt.
Ich hatte z.B. schon nach ...Copy... Sleep 500 drin, das brachte aber nix außer Verzögerungen Sad ...


.xlsm   PicToUF_Versuch_3.xlsm (Größe: 40,03 KB / Downloads: 4)
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#2
Hallo Andrè,

anbei umgebaut und angepasst.
Die API Prozeduren sind nicht von mir. 
Da dies schon länger her ist, weiß ich nicht mehr wo ich diese damals ausgegraben hatte. Ich denke mal, dass ich diese Prozeduren irgendwo aus einem der englischen Foren für brauchbar befunden hatte.

.xlsm   PicToUF_Versuch_3.xlsm (Größe: 38,61 KB / Downloads: 5)

Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Egon12 für diesen Beitrag:
  • schauan
Antworten Top
#3
Hallo Uwe,


vielen Dank für die Lösung. Ich hatte bisher bei Bedarf die Methode mit dem Speichern als Datei genutzt, nicht zuletzt, weil das auch ab und an erforderlich war.
Ich konnte mich dunkel erinnern, mal was in der Richtung Zwischenablage gelesen zu haben, hatte gegoogelt und bei den ersten Trefferseiten was im excelforum.com gefunden.

Nachdem ich Deine Lösung probiert hatte, habe ich, was ich sonst anderen Fragestellern empfehle, im Beispielbereich nachgeschaut. Da gibt es eine Lösung von Volti:
Thread-Bild-aus-Zwischenablage-in-Userform-Image-einfuegen
Leider funktioniert die Verlinkung auf diesen Beitrag in einem Beitrag nicht, da klemmt sich unser Wortfilter dagegen Sad Muss ich mal schauen, welche Schraube ich da noch drehen kann.

Schönen Rest-Sonntag noch,
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#4
Statt ein 'Picture' ein OLEObject 'image'


Angehängte Dateien
.xlsb   __PicToUF_snb.xlsb (Größe: 48,07 KB / Downloads: 6)
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
[-] Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:
  • schauan
Antworten Top
#5
Hallo André,

vorab: die Lösung von snb ist die einfachste, weil man direkt das Handle hat.
Erfordert aber ein Imageobjekt und wenn man das nicht hat oder will, wird es nix.

Ich setzte meinen Code, ich denke mal den, den ich da eingestellt habe (die Welt geht ja irgendwie auch weiter), schon seit langem ein. Funktioniert bisher fehlerfrei.
Den Umweg über die Dateiauslagerung gehe ich ungern.
Zu diesem Thema kommen ja recht oft Fragen in den Foren auf, z.B. auch im Herberforum.

Der Code in Uwes Datei scheint mir das gleiche Prinzip zu sein.

Gruß
Karl-Heinz
[-] Folgende(r) 1 Nutzer sagt Danke an volti für diesen Beitrag:
  • schauan
Antworten Top
#6
@snb,

das ist eine supereinfache Variante Wink

Ich hätte da noch einen zweiten Fall mit "internen" Objekten.
Wenn ich z.B. ein Chart (oder einen Bereich) als Bild kopiere und einfüge, oder eine eingefügte Form nehmen will, klappt das nicht Sad Da würde ich bei dem Code von Uwe oder Volti bleiben, oder gibt es da auch was einfacheres?

@volti,

Zitat:Erfordert aber ein Imageobjekt und wenn man das nicht hat oder will, wird es nix.

jupp, ich gehe mal davon aus, dass das das Problem mit den "internen" beschreibt Sad
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#7
Obwohl nicht unmittelbar:

Irfanview installiert in F:\Irfanview\

Code:
Private Sub UserForm_Initialize()
  c00 = "G:\OF\pict.gif"
 
  sheet1.Pictures(1).CopyPicture
  Shell "F:\Irfanview\" & Dir("F:\Irfanview\" & "i_view*.exe") & " /clippaste /convert=" & c00, 0

  Image1.Picture = LoadPicture(c00)
End Sub

PS. Ich habe auch versucht das Shape im Chart direkt ins Userform Image1 zu laden: gescheitert.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#8
@snb,

ja, das mit den Diagrammen ist auch so ein leidiges Thema.
Ich hatte u.a. ein Projekt von 1997 bis 2020 betreut, wo das für automatisierte Berechnungen in Abwesenheit der Benutzer angewendet wurde. Da wurde ein Bereich kopiert, temporär in ein Chart eingefügt und selbiges als Grafik gespeichert

....ChartObjects(1).Chart.Export FileName, Filter, False

Da hatte ich von einer Windows/Office-Version zur nächsten immer mehr Probleme Sad - nicht nur mit dem Kopieren. Wo das anfangs als Prozess ohne Anmeldung mit Excel im Hintergrund ging (WNT / O97), musste ich zum Schluss unter W10 / O2010 mit einer Pseudoanmeldung und Excel im Vordergrund arbeiten. Excel minimiert oder im Hintergrund führte dazu, dass die exportierten Bilder weiß blieben...

OK, das Projekt ist seit 2020 tod. Mein zweitältestes läuft seit 2007, und läuft, und läuft - wie lange doch manche Projekte leben Wink Hat zum Glück mit Bildern nix zu tun.
.      \\\|///      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