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

Forumthread: Bilder in einem Ordner auslesen und sortieren

Bilder in einem Ordner auslesen und sortieren
09.08.2017 16:26:57
Florian
Hallo Community,
ich benötige Hilfe bei einem Excel Makro.
Ich möchte dass alle Bild-Daten aus einem Ordner ausgelesen werden (Bild Name). Der Link der zu dem Ordnerführt soll in einer Msgbox eingegeben werden oder gleich über diese ausgewählt werden.
Ich habe mehrere Bilder die zu einem „Artikel“ gehören, das Hauptbild ist nur nach unserer Nummer benannt und alle fortlaufenden Bilder dann nach Nummer.01 /02 /03 ….. bis maximal .10 benannt, diese sollen dann auch gleich nebeneinander dargestellt werden.
Vorgehensweise wäre also folgende:
1. Makro über Schaltfläche aktivieren
2. Pfad zum Ordner in MsgBox eingeben
3. Bilddaten im Ordner werden ausgelesen
4. Zusammengehörende Bilder werden Nebeneinander dargestellt (bis max 10 Bilder, wenn es mehr sind die anderen nicht aufnehmen)
5. Usw.
6. End Sub ;)
Schon mal Danke für die Hilfe!
Anzeige

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bilder in einem Ordner auslesen und sortieren
09.08.2017 16:43:41
Michael
Hallo!
Worum geht's Dir genau?
Ich möchte dass alle Bild-Daten aus einem Ordner ausgelesen werden (Bild Name).
Zusammengehörende Bilder werden Nebeneinander dargestellt
Willst Du jetzt die Dateinamen aufgelistet haben, oder willst Du diese Bilddateien in Excel einfügen?
Wenn es um Zweiteres geht: Wohin? Auf ein Tabellenblatt? Dir ist klar, dass eingefügte Bilddateien die Dateigröße immens erhöhen? In welcher Größe sollen die Bilder ggf. eingefügt werden? Etc.
Schon mal Danke für die Hilfe!
Sofern Du schon erste Ansätze für diese Aufgabe hast, dann zeig sie, dann _helfen_ wir konkret dort weiter, wo Du stehst. Ansonsten bleib realistisch und bedank Dich ggf. für fertige Lösungen ;-).
LG
Michael
Anzeige
AW: Bilder in einem Ordner auslesen und sortieren
09.08.2017 18:11:47
Claus
Hallo,
also das Einlesen der Dateinamen in einem Verzeichnis kannst Du über folgenden Mechanismus machen:
Zeile=1
Datei = Dir(Pfad & "\Dateiname") -- Im Dateinamen sind Wildcards möglich, also beispielsweise *.jpg
Do Until Datei = ""
cells(zeile1,1)=Dateiname
...
Datei = Dir
Loop
Damit müsstest Du schon mal weiter kommen...
Die Pfadangabe über einen Dropdown zu machen, halte ich zwar für benutzerfreundlich, aber nicht zwingend nötig, denn den Pfad könntest Du ja in einem eigenen Sheet der Datei ablegen und dann auf die jeweilige Zelle referenzieren...
Gruss
Claus
Anzeige
AW: Bilder in einem Ordner auslesen und sortieren
10.08.2017 07:33:07
Florian
Hallo,
erst mal ein großes Kompliment, dass ist das erste Forum in dem ich tatsächlich mal eine Antwort auf eine Frage/Beitrag bekomme.
Ich habe das Ganze vielleicht etwas verwirrend erklärt.
Ich habe einen Ordner in dem sich Bilddaten zu unseren Artikel befinden, zu manchen Artikeln gibt es nur ein Bild, zu den meisten gibt es mehrer Bilder.
Ich möchte nun das alle Bildnamen in einer Exceltabelle aufgelistet werden.
Diese Makro Habe ich schon:
Sub Auslesen()
Dim fs As Object
Dim fVerz As Object
Dim fDatei As Object
Dim fdateien As Object
Dim strDat As String
Dim Zeile As Integer
Set fs = CreateObject("scripting.FileSystemObject")
Set fVerz = fs.getFolder("Link/zum/Ordner")
Set fdateien = fVerz.Files
For Each fDatei In fdateien
If InStr(fDatei, "") > 0 Then
Zeile = Zeile + 1
Cells(Zeile, 1) = fDatei.Name
End If
Next fDatei
End Sub
Das passt aber nicht so gut.
Es wäre gut wenn ich den Link zu dem Ordner in z.B. in Zelle C2 eintrage und das Makro dies dann erkennt und die Bildnamen ausließt, noch besser wäre wenn ich den Link zum Ordner direkt in einer MsgBox eintrage.
Und dann kommt der 2te Schritt:
Die Bildnamen werden in der Tabelle fortlaufen untereinander Dargestellt und zusätzlich werden Bilder die zum selben Artikel gehören in den Spalten neben dem Hauptbild dargestellt.
Ich versuch gerade mal schnell eine Excel Liste hochzuladen dort kann man in Tabellenblatt 2 sehen wie ich mir das Ergebnis Vorstelle.
Was man zusätlich noch beachten sollte ist, dass es zu manchen Artikeln mehr als 10 Bilder gibt ich benötige aber dann nur die Bildnamen der ersten 10.
Vorab schon mal vielen lieben Dank für die Hilfe!
Anzeige
Teste mal...
10.08.2017 13:04:48
Michael
Hallo Florian,
...folgenden Code auf Basis Deiner Bsp-Datei:
Sub a()
Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim Ws As Worksheet: Set Ws = Wb.Worksheets("Beispiel")
Dim Dlg As FileDialog, Dic As Object
Dim Pfad$, Datei$, Rw&, Sp&, Idx$
Application.ScreenUpdating = False
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Bitte Bilder-Pfad wählen"
.AllowMultiSelect = False
If .Show  -1 Then
MsgBox "Vorgang abgebrochen", vbInformation
Exit Sub
Else: Pfad = .SelectedItems(1) & "\"
End If
End With
Set Dic = CreateObject("Scripting.Dictionary")
Datei = Dir(Pfad & "*.*", vbNormal)
With Ws
Do While Datei  ""
If LCase(Right(Datei, 3)) = "jpg" Or LCase(Right(Datei, 3)) = _
"png" Then
Idx = Left(Datei, InStr(1, Datei, ".") - 1)
Rw = .Cells(.Rows.Count, 8).End(xlUp).Offset(1, 0).Row
'Hauptdatei
If InStrRev(Datei, ".", Len(Datei) - 4) = 0 Then
If Not Dic.exists(Idx) Then
Dic.Add Idx, Rw
.Cells(Rw, 8) = Datei
.Cells(.Rows.Count, 6).End(xlUp).Offset(1, 0) = Datei
Else:
.Cells(Dic(Idx), 8) = Datei
.Cells(.Rows.Count, 6).End(xlUp).Offset(1, 0) = Datei
End If
'Folgedatei bis #10
Else:
Sp = CLng(Mid(Datei, InStr(1, Datei, ".") + 1, 2))
If Sp 
Pfad zum Ordner in MsgBox eingeben
Warum eine Inputbox (!), wenn man gleich einen Pfad-Auswahl-Dialog aufrufen kann; ist jetzt so im Code.
Noch eines: In Deiner Bsp-Datei listest Du in F:F alle Dateien auf, in H:H die Hauptdateien (ohne die zusätzliche Nummerierung), d.h. wenn Du neben den Hauptdateien die Folgedateien bis inkl. Nummerierung 10 willst, muss bis Spalte R eingetragen werden (ist in meinem Code auch so).
Gib Bescheid!
LG
Michael
Anzeige
AW: Teste mal...
10.08.2017 15:40:59
Florian
Hallo,
Danke für die Unterstützung echt!
Wenn ich das Makro ausführen will bekomme ich nach dem auswählen des Ordners die Fehlermeldung 13 "Typen Unverträglich" und es werden beim auswählen des Ordners im Ordner auch keine Inhalte (Bilder) angezeigt, obwohl sich JPEG Dateien darin befinden.
Sub a()
Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim Ws As Worksheet: Set Ws = Wb.Worksheets("Beispiel")
Dim Dlg As FileDialog, Dic As Object
Dim Pfad$, Datei$, Rw&, Sp&, Idx$
'''''Application.ScreenUpdating = False
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Bitte Bilder-Pfad wählen"
.AllowMultiSelect = False
If .Show -1 Then
MsgBox "Vorgang abgebrochen", vbInformation
Exit Sub
Else: Pfad = .SelectedItems(1) & "\"
End If
End With
hier muss irgendwo der Wurm drin sein.
Nochmals echt vielen Dankt
Anzeige
Das kann ich nicht ganz nachvollziehen...
10.08.2017 15:54:39
Michael
Florian,
hier muss irgendwo der Wurm drin sein.
...denn ich habe meinen Code erfolgreich getestet.
werden beim auswählen des Ordners im Ordner auch keine Inhalte (Bilder) angezeigt
Ja, das passt so (in diesem Dialog) - es geht ja nur darum den Verzeichnis-Pfad zu erhalten; die Filterung über "png" bzw. "jpg" Dateitypen findet dann erst in der Schleife über die Dateien statt.
Wie gesagt, das läuft bei mir problemlos, ich kann daher noch nicht viel zu der Fehlermeldung sagen.
In welcher Codezeile springt der Debugger (gelb markiert) an?
LG
Michael
Anzeige
AW: Das kann ich nicht ganz nachvollziehen...
10.08.2017 16:08:34
Florian
Hallo,
habe es Fett markiert.
Ich überprüfe es bei mir auch nochmal.
Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim Ws As Worksheet: Set Ws = Wb.Worksheets("Beispiel")
Dim Dlg As FileDialog, Dic As Object
Dim Pfad$, Datei$, Rw&, Sp&, Idx$
'''''Application.ScreenUpdating = False
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Bitte Bilder-Pfad wählen"
.AllowMultiSelect = False
If .Show -1 Then
Anzeige
AW: Das kann ich nicht ganz nachvollziehen...
10.08.2017 16:08:35
Florian
Hallo,
habe es Fett markiert.
Ich überprüfe es bei mir auch nochmal.
Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim Ws As Worksheet: Set Ws = Wb.Worksheets("Beispiel")
Dim Dlg As FileDialog, Dic As Object
Dim Pfad$, Datei$, Rw&, Sp&, Idx$
'''''Application.ScreenUpdating = False
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Bitte Bilder-Pfad wählen"
.AllowMultiSelect = False
If .Show -1 Then
Anzeige
Das kann ich wirklich nicht nachvollziehen...
10.08.2017 16:30:20
Michael
Florian,
...arbeitest Du etwa nicht unter Windows? Greifst Du nicht auf ein lokales bzw. Netz-Laufwerk zu?
Sonst kann ich mir nicht mehr viel vorstellen.
Wie gesagt, der Code funktioniert, und mit dieser Pfad-Auswahl arbeite ich ständig.
Alternativ kannst Du auch den folgenden Code versuchen, da wird die Pfadangabe aus Zelle C2 des angegebenen Blattes (hier "Beispiel") bezogen:
Sub a()
Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim Ws As Worksheet: Set Ws = Wb.Worksheets("Beispiel")
Dim Dlg As FileDialog, Dic As Object
Dim Pfad$, Datei$, Rw&, Sp&, Idx$
Application.ScreenUpdating = False
Pfad = IIf(Right(Ws.Range("C2"), 1) = "\", Ws.Range("C2"), _
Ws.Range("C2") & "\")
Set Dic = CreateObject("Scripting.Dictionary")
Datei = Dir(Pfad & "*.*", vbNormal)
With Ws
Do While Datei  ""
If LCase(Right(Datei, 3)) = "jpg" Or LCase(Right(Datei, 3)) = _
"png" Then
Idx = Left(Datei, InStr(1, Datei, ".") - 1)
Rw = .Cells(.Rows.Count, 8).End(xlUp).Offset(1, 0).Row
'Hauptdatei
If InStrRev(Datei, ".", Len(Datei) - 4) = 0 Then
If Not Dic.exists(Idx) Then
Dic.Add Idx, Rw
.Cells(Rw, 8) = Datei
.Cells(.Rows.Count, 6).End(xlUp).Offset(1, 0) = Datei
Else:
.Cells(Dic(Idx), 8) = Datei
.Cells(.Rows.Count, 6).End(xlUp).Offset(1, 0) = Datei
End If
'Folgedatei bis #10
Else:
Sp = CLng(Mid(Datei, InStr(1, Datei, ".") + 1, 2))
If Sp 
Dann könntest Du wenigstens die grds. Funktionalität testen...
LG
Michael
Anzeige
AW: Das kann ich wirklich nicht nachvollziehen...
10.08.2017 17:04:02
Florian
Hallo,
es tut mir sehr leid das ich da nicht hin bekomme!
kann es sein das hier (Fett Markiert) etwas nicht stimmt?
Sub a()
Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim Ws As Worksheet: Set Ws = Wb.Worksheets("Beispiel")
Dim Dlg As FileDialog, Dic As Object
Dim Pfad$, Datei$, Rw&, Sp&, Idx$
Application.ScreenUpdating = False
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Bitte Bilder-Pfad wählen"
.AllowMultiSelect = False
If .Show -1 Then
MsgBox "Vorgang abgebrochen", vbInformation
Exit Sub
Else: Pfad = .SelectedItems(1) & "\"
End If
End With
Set Dic = CreateObject("Scripting.Dictionary")
Datei = Dir(Pfad & "*.*", vbNormal)
With Ws
Do While Datei ""
If LCase(Right(Datei, 3)) = "jpg" Or LCase(Right(Datei, 3)) = _
"png" Then
Idx = Left(Datei, InStr(1, Datei, ".") - 1)
Rw = .Cells(.Rows.Count, 8).End(xlUp).Offset(1, 0).Row
'Hauptdatei
If InStrRev(Datei, ".", Len(Datei) - 4) = 0 Then
If Not Dic.exists(Idx) Then
Dic.Add Idx, Rw
.Cells(Rw, 8) = Datei
.Cells(.Rows.Count, 6).End(xlUp).Offset(1, 0) = Datei
Else:
.Cells(Dic(Idx), 8) = Datei
.Cells(.Rows.Count, 6).End(xlUp).Offset(1, 0) = Datei
End If
'Folgedatei bis #10
Else:
Sp = CLng(Mid(Datei, InStr(1, Datei, ".") + 1, 2))
Gäbe es die Möglichkeit das ich einfach deine Liste runterlade? (die in der das Makro läuft)
Danke für die Geduld echt!
Und doch ich Arbeite unter Windows.
Anzeige
NEIN!...
10.08.2017 17:14:09
Michael
Florian,
kann es sein das hier (Fett Markiert) etwas nicht stimmt?
...das kann nicht sein, da ich, wie bereits erwähnt, den Code schon erfolgreich getestet habe.
Hier Deine adaptierte Bsp-Datei retour: https://www.herber.de/bbs/user/115383.xlsm
Ich habe Dir beide Makros, Pfad-Auswahl als Dialog bzw. per Zelle, eingefügt - Du siehst auf dem Tabellenblatt für jedes Makro eine Schaltfläche. Wenn Du die Zell-Version nimmst, muss natürlich in C2 eine Pfadangabe stehen.
Wenn das nicht klappt, kann ich Dir nicht mehr helfen - mein Code funktioniert!
LG
Michael
Anzeige
AW: NEIN!...
11.08.2017 07:53:29
Florian
Hallo Michael,
ich bin ein trottel :D!
Das Makro funktioniert tadellos.
Die Bilder sind bei uns mit .pt01 .pt02 .pt03 benannt nicht nur mit .01 .02 .03.
Ich versuche das anzupassen.
Ich wollte dich auch gestern auf keinen Fall angreifen, ich bin sehr dankbar das du mir überhaupt geholfen hast.
Also nochmal vielen Dank!
Anzeige
Freut mich und...
11.08.2017 07:57:19
Michael
Guten Morgen Florian,
...wenn Du noch warten kannst, passe ich Dir den Code im Laufe des Vormittags noch entsprechend an.
Aber schon mal danke für die Rückmeldung.
Lg Michael
P.s.: Ich habe mich nicht angegriffen gefühlt 😉
Ergänzung...
11.08.2017 09:26:01
Michael
Hallo Flo!
Hier, wie versprochen, nochmal die Beispielmappe mit ergänztem Code, der die Bezeichnung "###.pt##.jpg" (bzw. .png) abdeckt: https://www.herber.de/bbs/user/115397.xlsm
Viel Erfolg damit!
LG
Michael
Anzeige
AW: Ergänzung...
11.08.2017 12:15:53
Florian
Hallo,
Perfekt, funktioniert TOP!
Vielen Dank!
Gerne, Danke für die Rückmeldung, owT
11.08.2017 12:17:08
Michael

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

Bilder in einem Ordner auslesen und sortieren


Schritt-für-Schritt-Anleitung

  1. Makro aktivieren: Erstelle einen Button in deiner Excel-Datei, um das Makro zu starten.

  2. Pfad zum Ordner eingeben: Du kannst den Pfad zum Bild-Ordner entweder über eine MsgBox eingeben oder in eine Zelle (z.B. C2) eintragen.

  3. Bilddaten auslesen: Das folgende VBA-Skript liest alle Bildnamen (.jpg und .png) aus dem angegebenen Ordner:

    Sub Auslesen()
       Dim fs As Object
       Dim fVerz As Object
       Dim fDatei As Object
       Dim strDat As String
       Dim Zeile As Integer
    
       Set fs = CreateObject("scripting.FileSystemObject")
       Set fVerz = fs.getFolder("Link/zum/Ordner")
       Set fdateien = fVerz.Files
    
       For Each fDatei In fdateien
           If InStr(fDatei, "") > 0 Then
               Zeile = Zeile + 1
               Cells(Zeile, 1) = fDatei.Name
           End If
       Next fDatei
    End Sub
  4. Bilder nebeneinander darstellen: Stelle sicher, dass die Bilder, die zu einem Artikel gehören, in den Spalten neben dem Hauptbild angezeigt werden. Bis zu 10 Bilder sollen nebeneinander dargestellt werden.


Häufige Fehler und Lösungen

  • Fehler 13 "Typen unverträglich": Dieser Fehler tritt häufig auf, wenn der Pfad nicht korrekt übergeben wird. Überprüfe, ob der Pfad zum Bild-Ordner korrekt eingegeben wurde.
  • Keine Inhalte angezeigt: Stelle sicher, dass du auf ein lokales oder Netzlaufwerk zugreifst. Der Code filtert nur nach Bilddateien, die im angegebenen Ordner vorhanden sind.

Alternative Methoden

Falls du die Bilddaten aus einem Ordner ohne VBA auslesen möchtest, kannst du auch Power Query verwenden:

  1. Power Query aktivieren: Gehe zu "Daten" und wähle "Daten abrufen".
  2. Aus Datei: Wähle "Aus Ordner" und gib den Pfad zu deinem Bild-Ordner ein.
  3. Daten transformieren: Du kannst die Dateinamen und Pfade im Power Query Editor bearbeiten und die Daten anschließend in Excel laden.

Praktische Beispiele

Hier ist ein Beispiel für ein VBA-Skript, das die Bildnamen in einer Excel-Tabelle auflistet und die Bilder entsprechend anzeigt:

Sub a()
    Dim Wb As Workbook: Set Wb = ThisWorkbook
    Dim Ws As Worksheet: Set Ws = Wb.Worksheets("Beispiel")
    Dim Pfad$, Datei$, Rw&, Sp&, Idx$

    Application.ScreenUpdating = False
    Pfad = "C:\Dein\Pfad\Zum\Ordner\"

    Datei = Dir(Pfad & "*.*", vbNormal)
    Do While Datei <> ""
        If LCase(Right(Datei, 3)) = "jpg" Or LCase(Right(Datei, 3)) = "png" Then
            ' Hier kannst du die Logik hinzufügen, um die Bilder in Excel anzuzeigen
        End If
        Datei = Dir
    Loop
End Sub

Tipps für Profis

  • Bilder im Ordner sortieren: Du kannst die Bildnamen sortieren, indem du eine Sortierfunktion in dein VBA-Skript einfügst, um die Übersichtlichkeit zu verbessern.
  • Verwendung von Wildcards: Nutze Wildcards wie *.jpg oder *.png, um gezielt nur bestimmte Dateitypen auszulesen, was besonders nützlich ist, wenn der Ordner viele verschiedene Dateiformate enthält.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass nur die ersten 10 Bilder angezeigt werden?
Du kannst eine Zählvariable in dein Skript einfügen, die sicherstellt, dass nur bis zu 10 Bilder verarbeitet werden.

2. Funktioniert dieses Makro unter Windows 10?
Ja, das Skript ist kompatibel mit Excel unter Windows 10. Stelle sicher, dass du die richtigen Berechtigungen für den Zugriff auf den Ordner hast.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige