2.5k Aufrufe
Gefragt in Tabellenkalkulation von

Hallo Forumsmitglieder, -besucher, -betreiber

Habe Artikelnummern in einer Spalte (Spalte C) stehen und möchte mittels einem Makro den NAMEN des zugehörigenden Bildes in die Spalte J schreiben. Der Name des Bildes hat am Anfang die Artikelnummer stehen (ArtikelnummerZusatzbezeichnung.jpg) und befindet sich in einem Ordner auf dem NAS (kann für diesen Zweck auch lokal gespeichert werden..)

Folgendes Makro müsste geändert werden, dass nicht das eigentliche Bild, sondern nur der Name in die Zelle geschrieben wird...        (zwischendurch hat es vielleicht mal eine leere Zelle ohne Nummer...da soll das Makro bei der nächsten Zelle weitermachen)

Option Explicit

Sub Bildername_einfügen()
Dim Pfad As String, Wiederholungen As Long
On Error Resume Next
Pfad = "C:\Bilder"
For Wiederholungen = 2 To Range("H1000").End(xlUp).Row
Cells(Wiederholungen, 3).Activate
ActiveSheet.Pictures.Insert(Pfad & Cells(Wiederholungen, 1) & ".jpg").Select
Next
End Sub

Wie soll ich das anstellen bzw. was muss ich im Makro ändern? Herzlichen Dank

Gruss mona

12 Antworten

+1 Punkt
Beantwortet von beverly_ Experte (3.3k Punkte)

Hi,

nach diesem Prinzip:

Sub DateinamenAuslesen()
    Dim lngZeile As Long
    Dim strPfad As String
    Dim strDatei As String
    strPfad = "E:\Z_Test\" '<== anpassen!
    lngZeile = 1
    strDatei = Dir(strPfad & "\*.jpg")
    Do
        Cells(lngZeile, 1) = strDatei
        strDatei = Dir
        lngZeile = lngZeile + 1
    Loop While strDatei <> ""
End Sub

Bis später, Karin

0 Punkte
Beantwortet von m_0_n_ Einsteiger_in (68 Punkte)
Hallo Karin

Besten Dank für Deine superschnelle Hilfe. Funktioniert mal ansatzweise gut - überschreibt mir die erste Spalte in der Tabelle mit allen Bilddateinamen.  (lngZeile = geändert auf 5)    wie gebe ich die gewünschte Spalte an?

Auf diese Weise müsste ich nachher noch manuell die Bilder der richtigen Artikelnummer zuweisen (Bildername beginnt mit Artikelnummer plus Zusatztext), da dies nicht automatisch passiert. Leere Artikelnummernfelder müssten ebenfalls noch übersprungen werden.

Ist das realisierbar?

Besten Dank

gruss

mona
+1 Punkt
Beantwortet von beverly_ Experte (3.3k Punkte)
Hi,

die Adresszuweisung mittels Cells erfolgt nach diesem Prinzip: Cells(Zeile, Spalte).

Wenn die Artikelnummer bereits in einer Spalte steht und die Bildbezeichnung der jeweiligen Zelle zugeordnet werden soll, dann muss die Artikelnummer der laufenden Bilddatei erst gesucht werden und damit der Code generell anders aufgebaut sein. Poste doch mal ein Beispiel für eine Artikelnummer und den zugehörigen Namen des betreffenden Bildes. Außerdem: in welcher Spalte befinden sich die Artikelnummern?

Bis später, Karin
0 Punkte
Beantwortet von m_0_n_ Einsteiger_in (68 Punkte)
Hallo

Danke für Deine schnelle Rückmeldung.

Artikelnummer 37H8798           in Spalte H    ab Zelle5   zwischendurch Zellen ohne Artikelnummer

Bild dazu "37H8798 Kühler-Leuchte / Emblem.jpg"

Die Bildernamen wären dann in Spalte J

Besten Dank & Gruss, mona
+1 Punkt
Beantwortet von beverly_ Experte (3.3k Punkte)

Hi,

bist du sicher, dass die Dateinamen einen "/" enthalten? Ich bin der Meinung, das ist ein Sonderzeichen und ist im Dateinamen nicht zugelassen.

Vom Prinzip her kann man dein Vorhaben mit folgendem Code realisieren:

Sub DateinamenZuordnen()
    Dim strPfad As String
    Dim strDatei As String
    Dim rngBild As Range
    strPfad = "E:\Z_Test\" '<== Pfad anpassen!
    strDatei = Dir(strPfad & "\*.jpg")
    Do
        ' Finde den ersten Teil des Dateinamens bis zum Leerzeichen in Spalte H, 
        ' dabei genaue Übereinstimmung erforderlich
        Set rngBild = Columns(8).Find(Split(strDatei, " ")(0), lookat:=xlWhole)
        ' wenn in Spalte H gefunden -> Dateiname 2 Spalten rechts eintragen
        If Not rngBild Is Nothing Then rngBild.Offset(0, 2) = strDatei
        strDatei = Dir
    Loop While strDatei <> ""
End Sub


Bedingung ist dabei, dass die Artikelnummern tatsächlich alle an erster Position im Dateinamen vorkommen und durch ein Leerzeichen vom Rest getrennt sind. Der Code zerlegt nämlich den Dateinamen mittels Split-Funktion an der Position des Leerzeichens und "extrahiert" sozusagen den ersten Teil des Dateinamens, um ihn dann in Spalte H zu suchen.

Bis später, Karin

0 Punkte
Beantwortet von m_0_n_ Einsteiger_in (68 Punkte)
Du bist suuper! Funktioniert genauso, heisst wenn Bildname effektiv mit Artikelnummer anfängt. Das mit den Leerzeichen - genial!

Sobald ich aber einen Dateinamen habe, der ein L vorne an der Nummer aufweist beim Bildnamen (hat etliche davon, sehe ich erst jetzt) - nicht aber bei der Artikelnummer, stoppt das Makro.

Muss wohl trotzdem manuell noch vorbereiten und diese Artikel ändern bzw angleichen, damit das Makro bis zum Ende durchläuft. Ausser es überspringt Fehler....

Vielen lieben Dank & Gruss, mona
+1 Punkt
Beantwortet von beverly_ Experte (3.3k Punkte)
Ist zwischen dem L und der Artikelnummer auch ein Leerzeichen oder stehen sie unmittelbar hintereinander?

Was meinst du mit "stoppt das Makro"? Wird ein Fehler ausgegeben und wenn ja - welcher genau? Ich kann das allerdings nicht nachvollziehen, denn wenn der Name im Tabellenblatt nicht gefunden wird, wird die nächste Bilddatei genommen und es kann deshalb kein Fehler auftreten.

Bis später, Karin
0 Punkte
Beantwortet von m_0_n_ Einsteiger_in (68 Punkte)
Ja genau, zwischen L und Artikelnummer ist ein Leerzeichen.

Habe das Makro nochmals laufen lassen und festgestellt, dass es bis zum Ende läuft. Da ich dazwischen haufenweise nicht übereinstimmende Nummern hatte, dachte ich, es hätte gestoppt. Sorry, es läuft perfekt!!!!!!!!!!!

Vielen Dank & Gruss, mona
+1 Punkt
Beantwortet von beverly_ Experte (3.3k Punkte)

Dann sollte es eigentlich mit diesem Code funktionieren:

Sub DateinamenZuordnen()
    Dim strPfad As String
    Dim strDatei As String
    Dim rngBild As Range
    strPfad = "E:\Z_Test\"
    strDatei = Dir(strPfad & "\*.jpg")
    Do
        If Left(strDatei, 1) <> "L" Then
            Set rngBild = Columns(8).Find(Split(strDatei, " ")(0), lookat:=xlWhole)
            If Not rngBild Is Nothing Then rngBild.Offset(0, 2) = strDatei
        Else
            Set rngBild = Columns(8).Find(Split(strDatei, " ")(1), lookat:=xlWhole)
            If Not rngBild Is Nothing Then rngBild.Offset(0, 2) = strDatei
        End If
        strDatei = Dir
    Loop While strDatei <> ""
End Sub


Es wird einfach unterschieden, ob das 1. Zeichen von Links im Dateinamen <> L ist - dann tue wie gehabt und nimm bei Split den Inhalt des ersten Feldes, andernfalls nimm bei Split den Inhalt vom 2. Feld als Basis für die Suche.

Bis später, Karin

0 Punkte
Beantwortet von m_0_n_ Einsteiger_in (68 Punkte)
Ultraaaa-genial! Herzlichen Dank!!!!!!!!!!!! Funktioniert genauso, wie oben beschrieben :-)))))

gruss
mona
...