Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1700to1704
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

Bild einfügen über SVERWEIS (Workaround)

Bild einfügen über SVERWEIS (Workaround)
08.07.2019 15:35:30
Bernhard
Einleitend möchte ich festhalten, dass ich keine wundersame Lösung für das Verknüpfen von Bildern mittels SVERWEIS gefunden habe! Folgend möchte ich skizzieren, wie ich einen Anwendungsfall lösen konnte, der möglicherweise auch für andere User ein Thema sein kann.
Ich habe keinerlei Erfahrung in VBA-Programmierung und die im folgenden verwendeten Codes sind NICHT von mir. Ich habe lediglich minimale Detailanpassungen vorgenommen und Code-Stücke zusammengefügt. Ich möchte mich nachdrücklich bei allen solidarischen Profi-Excel-/VBA-Usern bedanken, die Codes veröffentlichen, Hilfestellungen leisten und Erklärungen geben. Ich kann nicht mehr die Energie aufbringen, zu recherchieren, woher ich die folgend verwendeten Code-Zeilen habe und möchte mich bei den Erstellern mit der Bitte um Verständnis vielmals entschuldigen.
Die folgende Anleitung funktioniert jedenfalls in den Excel Versionen 2003 und 2007 und die (optionale) Photoshop-Anleitung für alle Photoshop-Versionen von CS2 bis CC.
A) Ausgangs-Situation (vereinfacht dargestellt)
a) In Tabelle „Artikel“ befinden sich ca. 600 Artikel, die eingekauft werden sollen. In dieser Tabelle sind die Artikel zeilenweise gelistet mit jeweils einer eindeutiger Artikelnummer sowie weiteren Angaben zum Artikel (Menge, Einkaufspreise etc.). Der Datenbereich beginnt in Zeile 3.
b) In Tabelle „Fotos“ befinden sich 1.500 Artikel (das Gesamtsortiment des Lieferanten), die zeilenweise gelistet sind mit der eindeutigen Artikelnummer in Spalte A und dem jeweiligen Bild in Spalte B. In dieser Tabelle befinden sich weitere Angaben zu den Artikeln wie EAN-Code und dergleichen. Der Datenbereich beginnt in Zeile 2.
c) Aufgaben:
  • Die richtigen Fotos aus der Tabelle „Fotos“ sollen in die Tabelle „Artikel“ verknüpft bzw. eingefügt werden.

  • Weitere Angaben aus der Tabelle „Fotos“ sollen in die Tabelle „Artikel“ übernommen werden.

  • Die Bilder sollen auch auf anderen PCs angezeigt werden können, also vollständig in Excel eingebettet sein.

  • Schön soll’s auch aussehen!

  • B) Lösungs-Weg
    1) Anwendung von SVERWEIS für Auslesen des EAN-Codes (und anderer Daten)
    =WENN(ISTFEHLER(SVERWEIS(F3;FOTOS!$A$2:FOTOS!$Q$9999;14;FALSCH));0;
    SVERWEIS(F3;FOTOS!$A$2:FOTOS!$Q$9999;14;FALSCH))

  • Formel in Tabelle „Artikel“ an gewünschter Stelle einfügen und mit Drag/Drop runterziehen

  • F3 = Hier befindet sich die eindeutige Artikelnummer

  • FOTOS!$A$2:FOTOS!$Q$9999;14 = Suchbereich aus der Tabelle „Fotos“, wobei in Spalte A (=erste Spalte) die eindeutige Artikelnummer und in Spalte 14 der EAN-Code steht.

  • Fehler abfangen durch WENN(ISTFEHLER): Da nicht bei allen Artikeln ein EAN-Code vorhanden ist, wird ein möglicher Fehler durch SVERWEIS abgefangen und stattdessen „0“ hingeschrieben.

  • 2) Exportieren der Bilder in einen Ordner
  • „Export“ aller Bilder aus Tabelle „Fotos“ mit Hilfe der Speicher-Funktion „Als Website speichern“

  • Website-Export-Format auf Kompatibilität „Internet Explorer 6“ setzen (damit wird eine doppelte Ausgabe der Bilddateien verhindert).

  • Export auf Tabelle einschränken

  • Es wird eine .htm-Datei angelegt und ein Ordner im gleichen Verzeichnis, in dem sich alle Bilder befinden.

  • Diesen Ordner umbennen in „bilder“

  • Excel exportiert die Bilder DER REIHENFOLGE nach (Zeile für Zeile) und benennt sie entsprechend, also heißt das erste Bild „image001.jpg“

  • ACHTUNG: Ist das exakt gleiche Bild mehrfach vorhanden, wird es dennoch nur einmal exportiert. Es muss bei dieser Methode zwingend darauf geachtet werden, dass die Menge der exportierten Fotos mit den vergebenen Dateinamen übereinstimmt! Beispiel: 1.500 Fotos sind vorhanden, das erste Bild ist „image001.jpg“, das letzte Bild ist „image1500.jpg“

  • 3) Optional: Bilder verbessern über Photoshop-Batch-Verarbeitung
  • Die Bilder liegen in unterschiedlichen Formaten vor, für die Endverarbeitung sollen diese alle gleich aussehen und „schön“ in der Artikel-Liste angezeigt werden.

  • In Photoshop einen kleinen Aktions-Satz anlegen:

  • „Bild zuschneiden“ auf Pixelfarbe oben links (weiße Leerfläche um die Artikelbilder wird entfernt)

  • „Bild einpassen“: gleiche Werte für Horizontal und Vertikal eingeben (z.B. 150x150px)

  • „Arbeitsfläche anpassen“: gleiche Werte für Horizontal und Vertikal eingeben, etwas größer als unter Bild einpassen, z.B. 160x160px

  • „Speichern unter“ in den Aktionssatz einbeziehen (erspart unnötige Rückfragen von Photoshop)

  • Aktionssatz unter „Stapelverarbeitung“ ausführen

  • Ergebnis: Alle Bilder sind quadratisch, haben die gleiche Größe und ein „bisschen Luft zum Atmen“

  • 4) Deklarierung der Bildnamen in der Fotos-Tabelle
  • Wie unter Punkt B1) beschrieben, werden die Bilder beim Export fortlaufend durchnummeriert. Diese Nummerierung mittels Drag&Drop in einer freien Spalte in der Fotos-Tabelle nachvollziehen: In folgendem Beispiel habe ich in Spalte D beim ersten Artikel einfach „1“ erfasst und mittels Drag&Drop bis zum Ende runtergezogen, beim letzten Artikel steht dann „1500“

  • Bild-Dateiname und relativen Pfad in einer freien Spalte (z.B. E) konstruieren: ="\bilder\image"&TEXT(D2;"000")&".jpg"

  • Formel mittels Drag&Drop runterziehen

  • Neue Spalte nach E anlegen, als „nur Text“ formatieren, Daten aus Spalte E kopieren und mittels „Inhalte einfügen - nur Werte“ einfügen (es wird ein sauberer String-Wert für den später folgenden VBA-Code benötigt).

  • In Spalte F befindet sich nun „\bilder\image001.jpg“ in der ersten Datenreihe, „\bilder\image002.jpg“ in der zweiten Reihe usw.

  • 5) Bilder einfügen über VBA-Code
  • Neues Modul einfügen

  • Code einfügen:

  • Option Explicit
    Private Declare Function KillTimer Lib "user32.dll" ( _
    ByVal hWnd As Long, _
    ByVal nIDEvent As Long) As Long
    Private Declare Function SetTimer Lib "user32.dll" ( _
    ByVal hWnd As Long, _
    ByVal nIDEvent As Long, _
    ByVal uElapse As Long, _
    ByVal lpTimerFunc As Long) As Long
    Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String) As Long
    Private Const GC_CLASSNAMEMSEXCEL = "XLMAIN"
    Private objCell As Range
    Private strPicturePath As String
    Private hWnd As Long
    Public Function Grafik(Zelle As Range, Pfad As Range) As String
    Set objCell = Zelle.Cells(1, 1)
    strPicturePath = ThisWorkbook.Path & Pfad.Cells(1, 1).Value
    hWnd = FindWindow(GC_CLASSNAMEMSEXCEL, Application.Caption)
    SetTimer hWnd, 0, 1, AddressOf prcTimer
    End Function
    

    Private Sub Grafik_einfuegen()
    Dim objShape As Picture
    Set objShape = ActiveSheet.Pictures.Insert(strPicturePath)
    With objShape
    .Top = objCell.Top + 1
    .Left = objCell.Left
    .Height = objCell.Height - 8
    .Width = objCell.Width - 8
    End With
    End Sub
    

    Private Sub prcStopTimer()
    KillTimer hWnd, 0
    End Sub
    

    Private Sub prcTimer(ByVal hWnd As Long, ByVal nIDEvent As Long, _
    ByVal uElapse As Long, ByVal lpTimerFunc As Long)
    On Error Resume Next
    Call prcStopTimer
    Call Grafik_einfuegen
    End Sub
    
  • Dieser Code fügt ein Bild in der im ersten Parameter angeführten Zelle, unter Auslesen des relativen Pfads + Bildnamens aus der im zweiten Parameter angeführten Zelle aus.

  • Der absolute Pfad wird automatisch mit Hilfe von „ThisWorkbook.Path“ zusammengebaut.

  • Die Bilder werden entsprechend der Zellgröße eingefügt, wobei sie gleichzeitig um ein paar Pixel kleiner skaliert und minimal innerhalb der Zelle runtergerückt werden.

  • Ergebnis: Absolut einheitliche Ausrichtung der Bilder in den gewünschten Zellen und etwaige Rahmenformatierungen bleiben erhalten.

  • 6) Funktionsaufruf des „Bild-Einfügen-Codes“
  • In Tabelle „Artikel“ in eine beliebige freie Zelle in der ersten Datenreihe, z.B "Y3" folgende „Funktionsformel“ eingeben: =grafik(A3;L3)

  • Erster Wert "A3" = Dort soll das Bild eingefügt werden, also in der ersten Spalte der ersten Datenreihe (vorab Sicherstellen, dass Spalte A auch frei ist)

  • Zweiter Wert "L3" = Dort steht der Pfad und der Bildname, der mittels SVERWEIS ausgelesen wird:
    =WENN(ISTFEHLER(SVERWEIS(F3;FOTOS!$A$2:FOTOS!$Q$9999;6;FALSCH));0;
    SVERWEIS(F3;FOTOS!$A$2:FOTOS!$Q$9999;6;FALSCH))

  • Hinweis: Der Wert „6“ bezieht sich auf die 6. Spalte „F“ in der Fotos-Tabelle. Dort befinden sich der relative Pfad und der Dateiname des Bildes (siehe Punkt 3)

  • Mittels Drag&Drop runterziehen. Leider passiert (fast) nichts. Es wird nämlich keine Formel, sondern eine „Funktions-Formel“ runtergezogen und die „Funktions-Formel“ wird nur bei expliziter Bestätigung ausgeführt. Deshalb noch ein kleiner Code:

  • 7) Code zum automatisierten „Anklicken“ der "Funktionsformel"
  • Neues Modul anlegen

  • Code einfügen:

  • Public Sub F2Enter()
    Dim zelle2 As Object
    Sheets(1).Range("Y1:Y1365").Select
    For Each zelle2 In Selection
    SendKeys "{F2}", True
    SendKeys "{ENTER}", True
    newHour = Hour(Now())
    newMinute = Minute(Now())
    newSecond = Second(Now()) + 2
    waitTime = TimeSerial(newHour, newMinute, newSecond)
    Application.Wait waitTime
    Next zelle2
    End Sub
    

  • In der Zeile „Sheets(1).Range("Y3:Y1365").Select“ ist im Rangebereich der gewünschte Zellenbereich anzugeben

  • Dieser Code geht in jede Zelle im angeführten Range-Bereich, drückt dort „F2“ (Zelle aktivieren) und anschließend „ENTER“. Damit wird die „Funktions-Formel“ ausgeführt.

  • Damit der Code nicht „zu schnell“ ausgeführt wird, ist eine 2-Sekunden-Bremse eingebaut. Dieser Wert kann in der Zeile newSecond = Second(Now()) + 2 geändert werden.

  • Formular-Schaltfläche anlegen und das Makro „F2Enter“ auswählen.

  • Schaltfläche drücken, zuschauen, freuen & FERTIG!

  • Userbild

    1
    Beitrag zum Forumthread
    Beitrag zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: Bild einfügen über SVERWEIS (Workaround)
    10.07.2019 20:09:04
    onur
    Und was genau ist jetzt dein Problem?
    Anzeige

    72 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige