Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Bild in Userform (Image1) einfügen

Bild in Userform (Image1) einfügen
19.07.2024 13:09:47
Richi
Hallo Zusammen
Habe Fehlermeldung Laufzeitfehler 481 ungültiges Bild. Beispieldatei hochgeladen.
Kann mir jemand von euch weiterhelfen?
Ich kopiere einen Bereich, erstelle damit temporär ein Bild. Will dieses in Userform "UFLegende" (Image1) einfügen. Dabei erhalte ich im 2 .letzen Step der PRG obengenannte Fehlermeldung und ich komm einfach nicht weiter.

Liebe Gruess
Richi




https://www.herber.de/bbs/user/171125.xlsm
Anzeige

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bild in Userform (Image1) einfügen
19.07.2024 13:16:50
Onur
Und inwiweit soll uns dabei eine passwortgeschützte Datei helfen?
AW: Bild in Userform (Image1) einfügen
19.07.2024 13:35:39
Onur
Willst du mich auf den Arm nehmen ???
Anzeige
AW: Bild in Userform (Image1) einfügen
19.07.2024 13:43:05
Richi
Das habe und hatte ich nie vor. Beim besten Willen ich hab nirgends ein Passwort oder sonst einen Schutz hinterlegt.
AW: Bild in Userform (Image1) einfügen
19.07.2024 14:44:12
Onur
Sorry, mein Fehler!
Auf dem neuen Rechner muss ich noch den Trustcenter richtig einstellen.
Sorry nochmals!
AW: Bild in Userform (Image1) einfügen
19.07.2024 14:49:58
Richi
Alles Gut. Hab mir den Kopf zerbrochen was ich falsch mache.

Hab anderweitig (von Peter) die Lösung erhalten.

Richi
Anzeige
AW: Bild in Userform (Image1) einfügen
19.07.2024 15:40:36
Richi
Besten Dank. Bin mir sicher das funktioniert. Leider versteh ich bei diesem Code nur Bahnhof. :-) Muss mir das mal in einer ruhigen Minute anschauen und versuchen diesen Code zu verstehen. Bin mit VBA noch immer in der Lernphase.


Liebe Gruess
Richi
Anzeige
AW: Bild in Userform (Image1) einfügen
19.07.2024 13:28:12
volti
Hallo Richi,

vorab: Das erstellte Bild ist leer, deshalb gibt es den Fehler.
Warum es leer ist, habe ich jetzt nicht ermittelt, vielleicht hilft jemand anderes in dieser Sache.

Ich könnte Dir allerdings eine Alternative vorschlagen, die ein wenig umfangreicher ist aber auch ohne den Umweg über eine Datei auskommt.
Vielleicht gefällt sie Dir ja und bringt Dich weiter in dieser Sache...

Code:


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 GUID Data1 As Long Data2 As Integer Data3 As Integer Data4(0 To 7) As Byte End Type Private Type PIC_DESC lSize As Long lType As Long hPic As LongPtr hPal As LongPtr End Type Private Const PICTYPE_BITMAP = 1 Private Const CF_BITMAP = 2 Private Const IMAGE_BITMAP = 0 Private Const LR_COPYRETURNORG = &H4 Sub Paste_Picture_In_UF() ' Fügt ein Bild aus der Zwischenablage in ein Userform-Control ein Dim oPict As IPictureDisp Dim tPicInfo As PIC_DESC, tID_IDispatch As GUID If IsClipboardFormatAvailable(CF_BITMAP) <> 0 Then If OpenClipboard(0&) <> 0 Then With tID_IDispatch .Data1 = &H20400 .Data4(0) = &HC0 .Data4(7) = &H46 End With With tPicInfo .lSize = LenB(tPicInfo) .lType = PICTYPE_BITMAP .hPic = CopyImage(GetClipboardData(CF_BITMAP), _ IMAGE_BITMAP, 0, 0, LR_COPYRETURNORG) CloseClipboard If .hPic <> 0 Then _ OleCreatePictureIndirect tPicInfo, tID_IDispatch, 0&, oPict End With If Not oPict Is Nothing Then ' ######### Hier die Userform und Image-Angaben anpassen ######## UFLegende.Image1.Picture = oPict Else MsgBox "Das Bild kann nicht angezeigt werden", vbCritical, "Bild einfügen" End If End If End If End Sub Sub Test() ThisWorkbook.Sheets("Legende Status").Range("B8:J33").Copy DoEvents ' Achtung, wichtig Paste_Picture_In_UF UFLegende.Show End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz
Anzeige
AW: Bild in Userform (Image1) einfügen
19.07.2024 13:56:17
peter
Hallo

Hab folgende geändert:

Von PNG auf JPEG umgestellt (Fehlermeldung ist weg)



' Export the chart as an image
tempFilePath = ThisWorkbook.Path & "\temp_image.jpeg"
chartObj.Chart.Export Filename:=tempFilePath, FilterName:="JPEG"


Damit ich auch wirklich ein Bild bekomme habe ich folgendes eingefügt:


' Create a temporary chart object to hold the image
Set chartObj = ws.ChartObjects.Add(Left:=rng.Left, Top:=rng.Top, Width:=rng.Width, Height:=rng.Height)
chartObj.Activate
ActiveChart.Paste


Peter
Anzeige
AW: Bild in Userform (Image1) einfügen
19.07.2024 14:16:54
Richi
Danke Peter. Prg läuft durch. Bild wird generiert, leider nur weisser Hintergrund. Hast ev. dafür auch eine Lösung?

Richi
AW: Bild in Userform (Image1) einfügen
19.07.2024 14:22:54
peter
Hallo

Hab ich leider vergessen zu schreiben.
Zuerst den Range kopieren und dann Chart erzeugen.



' Set worksheet and range
Set ws = ThisWorkbook.Sheets("Legende Status")
Set rng = ws.Range("B8:J33")

' Copy the range as a picture
rng.CopyPicture Appearance:=xlScreen, Format:=xlPicture

' Create a temporary chart object to hold the image
Set chartObj = ws.ChartObjects.Add(Left:=rng.Left, Top:=rng.Top, Width:=rng.Width, Height:=rng.Height)

chartObj.Activate
ActiveChart.Paste


' Export the chart as an image
tempFilePath = ThisWorkbook.Path & "\temp_image.jpeg"
chartObj.Chart.Export Filename:=tempFilePath, FilterName:="JPEG"

' Delete the temporary chart object
chartObj.Delete


Peter
Anzeige
AW: Bild in Userform (Image1) einfügen
19.07.2024 15:13:38
Richi
Danke Peter. Jetztt läufts :-)

Liebe Gruess
Richi
Nimm mal...
19.07.2024 15:09:38
Case
Moin, :-)

... das: ;-)

chartObj.Select


Statt "Activate". Man kann nur auf einem aktiven Tabellenbaltt etwas "aktivieren". Du startest aber vielleicht von einem anderen Tabellenblatt?

Servus
Case
Anzeige
AW: Nimm mal...
19.07.2024 15:11:41
Richi
Dank für deinen Input. Problem ist gelöst.

Liebe Gruess
Richi
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige