Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1796to1800
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
Inhaltsverzeichnis

Bilder in Exel automatisch einfügen

Bilder in Exel automatisch einfügen
15.12.2020 14:26:08
Matthias
Hallo,
ich beziehe mich auf eine Frage, die ich am 25. November bereits einmal gestellt habe. Ich erhielt postwendend eine Antwort und Nachfrage von Nepomuk , die ich aber wegen diverser Turbulenzen bisher nicht beantwortet habe. Nun habe ich Schwierigkeiten, diese Nachricht zu finden bzw. darauf zu antworten.
Daher noch einmal mein Problem: ich habe eine Tabelle mit knapp dreihundert Zeilen, in denen einzelne Ausstellungsobjekte beschrieben sind.
Jedes Objekt hat eine eindeutige Nummer.
Für jedes Objekt gibt es in einem separaten (lokalen) Ordner ein Foto. Die Bezeichnung der Bilddatei ist dabei eindeutig:
Bild (1).jpg - Bild (293).jpg.
Ziel ist es, in einer neue Tabellenspalte "Bild" für jedes Objekt das zugehörige Bild anzuzeigen.
Natürlich soll sich das Bild auch mit der ganzen Zeile sortieren und in ein anderes Arbeitsblatt exportieren lassen (z. B. für Auswahlvorgänge).
Die Bildgröße muß dazu vereinheitlicht werden. Ich bin mit Pixelangaben nicht erfahren und kann spontan nur sagen: eher klein (Thumpnails)
Ich hoffe, daß sich für diese Frage ein kundiger Helfer findet!
Mit dem händischen Einfügen habe ich es probiert und aufgegeben :-(
Mit Dank im Voraus,
Matthias Wenzel
ich nutze MSO 365 16.0.13426 (64-Bit)

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

Betreff
Datum
Anwender
Anzeige
AW: Bilder in Exel automatisch einfügen
15.12.2020 14:45:21
Nepumuk
Hallo Matthias,
lade bitte eine Beispielmappe mit ein paar Daten hoch.
Gruß
Nepumuk
AW: Bilder in Exel automatisch einfügen
15.12.2020 15:43:41
Nepumuk
Hallo Matthias,
teste mal:
Option Explicit

Public Sub Inset_Pictures()
    
    Const FOLDER_PATH As String = "H:\1215\Bilder\" 'Anpassen, Backslash am Ende nicht löschen !!!
    
    Dim objShape As Shape
    Dim objImageFile As Object, objImageProcess As Object
    Dim objWorksheet As Worksheet
    Dim strImagename As String, strTempFile As String
    Dim lngRow As Long
    
    Set objWorksheet = Worksheets("Tabelle1") 'Anpassen !!!
    
    For Each objShape In objWorksheet.Shapes
        If objShape.TopLeftCell.Column = 1 Then Call objShape.Delete
    Next
    
    Set objImageFile = CreateObject(Class:="WIA.ImageFile")
    Set objImageProcess = CreateObject(Class:="WIA.ImageProcess")
    
    Call objImageProcess.Filters.Add(FilterID:=objImageProcess.FilterInfos("Scale").FilterID)
    
    With objImageProcess.Filters(1)
        .Properties("PreserveAspectRatio") = True
        .Properties("MaximumWidth") = 60
        .Properties("MaximumHeight") = 75
    End With
    
    strTempFile = Environ$("TEMP") & "\Temp.jpg"
    
    If Dir$(strTempFile) <> vbNullString Then Call Kill(PathName:=strTempFile)
    
    For lngRow = 2 To Cells(Rows.Count, 2).End(xlUp).Row
        
        strImagename = "Bild(" & Cells(lngRow, 2).Text & ").jpg"
        
        If Dir$(FOLDER_PATH & strImagename) = vbNullString Then
            
            Cells(lngRow, 1).Value = "kein Bild"
            
        Else
            
            Call objImageFile.LoadFile(Filename:=FOLDER_PATH & strImagename)
            
            Set objImageFile = objImageProcess.Apply(Source:=objImageFile)
            
            Call objImageFile.SaveFile(Filename:=strTempFile)
            
            Call objWorksheet.Shapes.AddPicture(Filename:=strTempFile, _
                LinkToFile:=msoFalse, SaveWithDocument:=msoTrue, _
                Left:=Cells(lngRow, 1).Left, Top:=Cells(lngRow, 1).Top, Width:=-1, Height:=-1)
            
            Call Kill(PathName:=strTempFile)
            
        End If
    Next
    
    Set objImageFile = Nothing
    Set objImageProcess = Nothing
    Set objWorksheet = Nothing
    
End Sub

Gruß
Nepumuk
Anzeige
AW: Bilder in Exel automatisch einfügen
15.12.2020 16:49:12
Matthias
O je - hier habe ich mir ja was vorgenommen / ich habe noch nie mit VBA zu tun gehabt
dank crash-kurs habe ich inzwischen herausgefunden, wo ich was einsetzen und anpassen muß
wenn ich dann ausführen eingebe, bekomme ich die Fehlermeldung :
Laufzeitfehler '9' Index außerhalb des Bereiches
Das ganze sieht so aus:
Option Explicit
Public Sub Inset_Pictures()
Const FOLDER_PATH As String = "C:\Users\webwe\Sammlung Trauerkultur GR\Bilder Herr Jordan  _
November 2013\"
Dim objShape As Shape
Dim objImageFile As Object, objImageProcess As Object
Dim objWorksheet As Worksheet
Dim strImagename As String, strTempFile As String
Dim lngRow As Long
Set objWorksheet = Worksheets("C:\Users\webwe\Sammlung Trauerkultur GR\Sammlung  _
Trauerkultur GR  Stand 10.12.2020")
For Each objShape In objWorksheet.Shapes
If objShape.TopLeftCell.Column = 1 Then Call objShape.Delete
Next
Set objImageFile = CreateObject(Class:="WIA.ImageFile")
Set objImageProcess = CreateObject(Class:="WIA.ImageProcess")
Call objImageProcess.Filters.Add(FilterID:=objImageProcess.FilterInfos("Scale").FilterID)
With objImageProcess.Filters(1)
.Properties("PreserveAspectRatio") = True
.Properties("MaximumWidth") = 60
.Properties("MaximumHeight") = 75
End With
strTempFile = Environ$("TEMP") & "\Temp.jpg"
If Dir$(strTempFile)  vbNullString Then Call Kill(PathName:=strTempFile)
For lngRow = 2 To Cells(Rows.Count, 2).End(xlUp).Row
strImagename = "Bild(" & Cells(lngRow, 2).Text & ").jpg"
If Dir$(FOLDER_PATH & strImagename) = vbNullString Then
Cells(lngRow, 1).Value = "kein Bild"
Else
Call objImageFile.LoadFile(Filename:=FOLDER_PATH & strImagename)
Set objImageFile = objImageProcess.Apply(Source:=objImageFile)
Call objImageFile.SaveFile(Filename:=strTempFile)
Call objWorksheet.Shapes.AddPicture(Filename:=strTempFile, _
LinkToFile:=msoFalse, SaveWithDocument:=msoTrue, _
Left:=Cells(lngRow, 1).Left, Top:=Cells(lngRow, 1).Top, Width:=-1, Height:=-1)
Call Kill(PathName:=strTempFile)
End If
Next
Set objImageFile = Nothing
Set objImageProcess = Nothing
Set objWorksheet = Nothing
End Sub

Wenn ich Debugging klicke, wird die Zeile , die mit Set "objWorksheet" beginnt, gelb markiert.
Was kann ich tun?
Gruß. Matthias
Anzeige
AW: Bilder in Exel automatisch einfügen
15.12.2020 16:52:54
Nepumuk
Hallo Matthias,
ich kann mir nicht vorstellen dass du eine Tabelle mit dem Namen
"C:\Users\webwe\Sammlung Trauerkultur GR\Sammlung Trauerkultur GR Stand 10.12.2020"
hast. Da muss der Name der Tabelle rein in welche die Bilder eingefügt werden sollen.
Gruß
Nepumuk
AW: Bilder in Exel automatisch einfügen
15.12.2020 18:19:16
Matthias
Hallo Nepomuk,
ich danke Dir für deine Unterstützung - aber ich kapituliere ...
Mir ist hier zu vieles unverständlich und ich möchte nicht andere Menschen ausnutzen, wenn ich selbst nicht mal die notwendigen Grundlagen beherrsche. Und nach einer Übungsaufgabe sieht es mir nicht aus. Ich sollte mich erst einmal selbst mit den Basics mühen.
Dank und Gruß!
Matthias
Anzeige
AW: Bilder in Exel automatisch einfügen
15.12.2020 18:34:12
Nepumuk
Hallo Matthias,
was ist daran so schwierig da:
Set objWorksheet = Worksheets("Tabelle1") 'Anpassen !!!

den tatsächlichen Namen der Tabelle einzutragen in welche die Bilder eingefügt werden sollen. In deiner Beispielmappe hatte die Tabelle den Namen "Tabelle1".
Gruß
Nepumuk
Anzeige
AW: Bilder in Exel automatisch einfügen
15.12.2020 19:01:51
Matthias
Danke für's Ermutigen ...
ich habe jetzt begriffen, daß "Name der Tabelle" etwas anderes ist als "Name der xlsx-Datei".
Danach hat es beim "Ausführen" nicht mehr gemeckert, aber als Ergebnis stand in der betr. Spalte der Tabelle immer nur "kein Bild"
Was ist zu tun?
Gruß Matthias
AW: Bilder in Exel automatisch einfügen
15.12.2020 19:08:11
Nepumuk
Hallo Matthias,
stimmt der Pfad zu den Bildern, oder befinden sie sich in Unterordnern?
Const FOLDER_PATH As String = "C:\Users\webwe\Sammlung Trauerkultur GR\Bilder Herr Jordan November 2013\"
Gruß
Nepumuk
AW: Bilder in Exel automatisch einfügen
15.12.2020 19:14:09
Nepumuk
Hallo Matthias,
ich habe den Fehler gefunden. Da fehlt ein Leerzeichen zwischen "Bild" und der Klammer. Also:
strImagename = "Bild (" & Cells(lngRow, 2).Text & ").jpg"

Entschuldige, mein Fehler.
Gruß
Nepumuk
Anzeige
AW: Bilder in Exel automatisch einfügen
15.12.2020 20:11:56
Matthias
Es gibt in der nächsten Zeile noch einen Fehler: (Laufzeitfehler 52/ Dateiname oder -nummer falsch:
If Dir$(FOLDER_PATH & strImagename) = vbNullString Then
(inzwischen habe ich auch die Sache mit den Unterstrichen und Leerzeichen bei den Zeilenumbrüchen kapiert :-))
Alles andere sieht so aus:
Public Sub Inset_Pictures()
Const FOLDER_PATH As String = "C:\Users\webwe\Sammlung Trauerkultur GR\Bilder Herr Jordan  _
November 2013\ "
Dim objShape As Shape
Dim objImageFile As Object, objImageProcess As Object
Dim objWorksheet As Worksheet
Dim strImagename As String, strTempFile As String
Dim lngRow As Long
Set objWorksheet = Worksheets("Grundtabelle")
For Each objShape In objWorksheet.Shapes
If objShape.TopLeftCell.Column = 1 Then Call objShape.Delete
Next
Set objImageFile = CreateObject(Class:="WIA.ImageFile")
Set objImageProcess = CreateObject(Class:="WIA.ImageProcess")
Call objImageProcess.Filters.Add(FilterID:=objImageProcess.FilterInfos("Scale").FilterID)
With objImageProcess.Filters(1)
.Properties("PreserveAspectRatio") = True
.Properties("MaximumWidth") = 60
.Properties("MaximumHeight") = 75
End With
strTempFile = Environ$("TEMP") & "\Temp.jpg"
If Dir$(strTempFile)  vbNullString Then Call Kill(PathName:=strTempFile)
For lngRow = 2 To Cells(Rows.Count, 2).End(xlUp).Row
strImagename = "Bild (" & Cells(lngRow, 2).Text & ").jpg"
If Dir$(FOLDER_PATH & strImagename) = vbNullString Then
Cells(lngRow, 1).Value = "kein Bild"
Else
Call objImageFile.LoadFile(Filename:=FOLDER_PATH & strImagename)
Set objImageFile = objImageProcess.Apply(Source:=objImageFile)
Call objImageFile.SaveFile(Filename:=strTempFile)
Call objWorksheet.Shapes.AddPicture(Filename:=strTempFile, _
LinkToFile:=msoFalse, SaveWithDocument:=msoTrue, _
Left:=Cells(lngRow, 1).Left, Top:=Cells(lngRow, 1).Top, Width:=-1, Height:=-1)
Call Kill(PathName:=strTempFile)
End If
Next
Set objImageFile = Nothing
Set objImageProcess = Nothing
Set objWorksheet = Nothing
End Sub
Ich mache jetzt erst einmal Feierabend / morgen geht es weiter / vielen Dank !!
Anzeige
AW: Bilder in Exel automatisch einfügen
16.12.2020 09:25:02
Nepumuk
Hallo Matthias,
lösch mal das Leerzeichen was du als letztes Zeichen in der Konstanten FOLDER_PATH hast.
Gruß
Nepumuk
AW: Bilder in Exel automatisch einfügen
16.12.2020 11:40:53
Matthias
Jetzt hat es geklappt!!
Danke für die tolle Unterstützung! Unglaublich, welche Mühe sich Menschen wie Du mit solchen unbedarften Usern wie mir machen ...
Ich habe einiges gelernt in den vergangenen Tagen.
Jetzt will ich nur noch ein wenig an der Größe schrauben / das dürften die Zahlenwerte in diesen Zeilen sein :
.Properties("MaximumWidth") = 60
.Properties("MaximumHeight") = 75
Ich wünsche eine schöne Weihnachtszeit, heiteres Gelassensein und eine gußeiserne Gesundheit!
Matthias Wenzel
"XUNDBLEIM!"
Anzeige
AW: Bilder in Exel automatisch einfügen
16.12.2020 11:54:48
Matthias
Das Problem ist gelöst!

316 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige