Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

copypicture

Forumthread: copypicture

copypicture
Sivis
Hallo Liebe Forumler,
ich habe ein kleines Problem, zu dem ich keine Antwort im forum gefunden hab, drum schreibe ich diesen beitrag, ich bin sicher, dass Ihr mir helfen könnt.
Ich möchte per vba einen Bereich einer arbeitsmappe als bild in einem userform einfügen.
Das Kopieren und Einfügen eines Bereiches in ein Worksheet ist kein Problem, der folgende code funktioniert einwandfrei:
Worksheets("mol_weights").Range("E1").CopyPicture xlScreen, xlBitmap
Worksheets("mol_weights").Paste _
Destination:=Worksheets("mol_weights").Range("E6")
auch das herber-beispiel des picture-imports funktioniert:
imgFrame.Picture = LoadPicture(lblDir.Caption & "\" & lblFile.Caption)
Nur weiss ich nicht, wie ich das mit .copypicture kopierte Bild als image in einem userform einfügen kann.
ich hoffe, ich hab mich nicht zu kompliziert ausgedrückt.
jetzt schon mal vielen Dank für Eure Antworten!!
Mario
Anzeige

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

Betreff
Benutzer
Anzeige
AW: copypicture
27.01.2012 12:31:31
Josef

Hallo Mario,
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Function RangeToImage(ByVal ImageFile As String, ByRef ImageRange As Object) As Long
  Dim objPict As Object, objChrt As Chart
  Dim strExt As String, bDelPic As Boolean
  
  On Error GoTo ErrExit
  
  RangeToImage = -1
  
  With ImageRange.Parent
    If TypeName(ImageRange) = "Range" Then
      ImageRange.CopyPicture Appearance:=xlScreen, Format:=xlBitmap
      
      .PasteSpecial Format:="Bitmap"
      
      Set objPict = .Shapes(.Shapes.Count)
      bDelPic = True
    ElseIf TypeName(ImageRange) = "Shape" Then
      Set objPict = ImageRange
    End If
    
    objPict.Copy
    
    Set objChrt = .ChartObjects.Add(1, 1, objPict.Width + 8, objPict.Height + 8).Chart
    
    strExt = Mid(ImageFile, InStrRev(ImageFile, ".") + 1)
    
    objChrt.Paste
    objChrt.Export ImageFile, FilterName:=strExt
    objChrt.Parent.Delete
    If bDelPic Then objPict.Delete
    DoEvents
    Set objPict = Nothing
    Set objChrt = Nothing
    RangeToImage = 0
  End With
  
  ErrExit:
  If Not objChrt Is Nothing Then objChrt.Parent.Delete
  If bDelPic Then If Not objPict Is Nothing Then objPict.Delete
  Set objPict = Nothing
  Set objChrt = Nothing
End Function


Sub test()
  Dim lngRet As Long
  Dim strFile As String
  
  strFile = Environ("TEMP") & "\tmp.png"
  
  lngRet = RangeToImage(strFile, Worksheets("mol_weights").Range("E1"))
  
  If lngRet = 0 Then
    imgFrame.Picture = LoadPicture(strFile)
    Kill strFile
  End If
End Sub



« Gruß Sepp »

Anzeige
AW: copypicture
27.01.2012 14:25:54
Sivis
Lieber Sepp,
zunächst mal vielen herzlichen Dank für Deine schnelle Antwort...! Ich hätte nicht gedacht, dass man es doch so kompliziert lösen muss, ich dachte, ich hätte einfach einen .paste/.insert/.pastespecial-befehl falsch verstanden/angewendet...!
Ich habe den code in meinen integriert und laufen gelassen, es funktioniert leider nicht. Ich erhalte die Fehlermeldung "Laufzeitfehler 481. ungültiges Bild". Wenn ich die Dateiendung des strFile in .bmp ändere (die Funktion RangeToImage stellt ja ein Bitmap her), funktioniert zwar der userform-code noch, aber das image imgFrame zeigt nichts an... . Was mache ich falsch...?!?
herzliche Grüsse und vielen Dank jetzt schon mal für Deine Antwort...!!
Mario
Anzeige
AW: copypicture
27.01.2012 14:58:50
Josef

Hallo Mario,
sorry, ja png geht nicht.
Aber
strFile = Environ("TEMP") & "\tmp.jpg"
und
strFile = Environ("TEMP") & "\tmp.bmp"
funktionieren

« Gruß Sepp »

Anzeige
AW: copypicture
27.01.2012 15:10:31
Sivis
Hi Sepp,
danke für die Antwort. Weisst du, warum mein Image nichts anzeigt...?!?
herzliche Grüsse!
Mario
AW: copypicture
27.01.2012 17:07:58
Josef

Hallo Mario,
dazu müsste ich deine Datei sehen, oder zumindest den gesamten Code.

« Gruß Sepp »

Anzeige
AW: copypicture
30.01.2012 17:06:07
Sivis
Hallo Sepp!
sorry, dass ich erst jetzt antworte, war im Wochenende... ;-))
ich kann Dir die Datei gerne schicken...! Ist etwas gross und mit Sicherheit unübersichtlich, aber ich bin sowieso froh um JEDEN Tipp oder Hint...
Schick mir deine Email-Adresse (kann man das hier verschlüsselt oder "privat"), dann schicke ich Dir das Ding mit Kommentaren gerne zu...
lieben Gruss!
Mario
Anzeige
AW: copypicture
30.01.2012 21:44:30
Josef

Hallo Mario,
lade doch ein abgespecktes Beispiel hoch, nur die UF und der dazugehörige Code.

« Gruß Sepp »

Anzeige
;
Anzeige

Infobox / Tutorial

Bilder mit VBA in UserForms einfügen


Schritt-für-Schritt-Anleitung

  1. Bereich kopieren: Um einen Bereich als Bild zu kopieren, verwende den folgenden VBA-Code:

    Worksheets("mol_weights").Range("E1").CopyPicture Appearance:=xlScreen, Format:=xlBitmap
  2. Bild in UserForm einfügen: Um das Bild in ein UserForm einzufügen, benötigst du eine Funktion, die das Bild aus dem Clipboard lädt. Hier ist ein Beispiel:

    Sub InsertImageInUserForm()
        Dim imgFrame As Object ' Dein Bild-Frame im UserForm
        Dim strFile As String
        strFile = Environ("TEMP") & "\tmp.bmp" ' Temporäre Datei für das Bild
    
        ' Funktionsaufruf zum Erstellen eines Bildes
        If RangeToImage(strFile, Worksheets("mol_weights").Range("E1")) = 0 Then
            imgFrame.Picture = LoadPicture(strFile)
            Kill strFile ' Temporäre Datei löschen
        End If
    End Sub
  3. Funktion RangeToImage: Diese Funktion konvertiert den kopierten Bereich in ein Bild und speichert es in einer Datei:

    Function RangeToImage(ByVal ImageFile As String, ByRef ImageRange As Object) As Long
        Dim objPict As Object, objChrt As Chart
        Dim strExt As String
        Dim bDelPic As Boolean
    
        On Error GoTo ErrExit
        RangeToImage = -1
    
        With ImageRange.Parent
            If TypeName(ImageRange) = "Range" Then
                ImageRange.CopyPicture Appearance:=xlScreen, Format:=xlBitmap
                .PasteSpecial Format:="Bitmap"
                Set objPict = .Shapes(.Shapes.Count)
                bDelPic = True
            ElseIf TypeName(ImageRange) = "Shape" Then
                Set objPict = ImageRange
            End If
    
            objPict.Copy
            Set objChrt = .ChartObjects.Add(1, 1, objPict.Width + 8, objPict.Height + 8).Chart
            strExt = Mid(ImageFile, InStrRev(ImageFile, ".") + 1)
            objChrt.Paste
            objChrt.Export ImageFile, FilterName:=strExt
            objChrt.Parent.Delete
            If bDelPic Then objPict.Delete
            DoEvents
            Set objPict = Nothing
            Set objChrt = Nothing
            RangeToImage = 0
        End With
    
    ErrExit:
        If Not objChrt Is Nothing Then objChrt.Parent.Delete
        If bDelPic Then If Not objPict Is Nothing Then objPict.Delete
        Set objPict = Nothing
        Set objChrt = Nothing
    End Function

Häufige Fehler und Lösungen

  • Laufzeitfehler 481: Ungültiges Bild: Dieser Fehler tritt auf, wenn das Bildformat nicht unterstütz wird. Stelle sicher, dass du die Dateiendung auf .bmp oder .jpg änderst. PNG funktioniert in diesem Kontext nicht.

  • Bild wird nicht angezeigt: Überprüfe, ob der Pfad zur temporären Datei korrekt ist und ob das Bild erfolgreich geladen wurde. Versichere dich, dass das imgFrame im UserForm richtig referenziert ist.


Alternative Methoden

  • Statt RangeToImage zu verwenden, könntest du das Bild direkt in eine PictureBox einfügen, indem du den selection.copypicture-Befehl verwendest, gefolgt von einem Paste-Befehl innerhalb der UserForm.

Praktische Beispiele

  • Um ein Bild eines bestimmten Bereichs in einem UserForm anzuzeigen, kannst du folgenden Code nutzen:

    Sub ShowImageInUserForm()
        Dim myForm As UserForm1
        Set myForm = New UserForm1
        myForm.Show
        Call InsertImageInUserForm
    End Sub

Tipps für Profis

  • Achte darauf, die temporären Bilddateien nach Gebrauch zu löschen, um den Speicher sauber zu halten.
  • Experimentiere mit verschiedenen Bildformaten, um die besten Ergebnisse zu erzielen. In vielen Fällen sind .bmp und .jpg die stabilsten Optionen.
  • Nutze die DoEvents-Funktion, um sicherzustellen, dass Excel genügend Zeit hat, das Bild zu verarbeiten, bevor der Code fortgesetzt wird.

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen CopyPicture und PasteSpecial? CopyPicture kopiert den angegebenen Bereich als Bild in die Zwischenablage, während PasteSpecial es ermöglicht, das Bild in das Ziel einzufügen, in diesem Fall in ein UserForm.

2. Warum kann ich keine PNGs verwenden? Die Funktionalität von LoadPicture und den unterstützten Bildformaten in Excel ist eingeschränkt. JPG und BMP sind in der Regel die sichersten Formate für UserForms.

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