Ich habe eine Excel Tabelle welche als Musterkatalog für diverse Produkte funktionieren soll. Ich möchte nun Bilder mittels einer Befehlsschaltfäche in die Spalte A Zelle A1, A2 bis A… eines anderen Tabellenblattes einfügen.
Das sieht folgendermaßen aus: Im Tabellenblatt „2.Fabrikate“ (Zelle K2) befindet sich ein Bild ActiveX Steuerelement in welchem ich ein Bild einfügen möchte. Mit einem Klick auf die Befehlsschaltfläche (in Zelle M1) soll nun das zuvor in Zelle K2 eingefügte Bild in das Tabellenblatt „Bilder“ in Spalte A eingefügt werden.
Kommt ein neues Bild hinzu so soll dieses mit der gleichen Vorgehensweise wie oben beschrieben eingefügt werden, jedoch soll das Bild eine Zeile unter dem zuvor eingefügten Bild eingefügt werden. Wenn ich nun z.B. 5 Bilder eingefügt habe sollte das so aussehen:
Im Tabellenblatt „Bilder“ sollen nun in Zelle A1 das erste Bild, in Zelle A2 das zweite Bild, …, und in Zelle A5 das fünfte Bild dargestellt sein.
Da ich bisher schon ca. 100 Bilder „per Hand“ eingefügt habe und diese bereits die Zellen A1 bis A100 besetzen, muss das nächste Bild dann auf A101 eingefügt werden können.
Kann man das mittels VBA irgendwie lösen? Ich würde mich freuen wenn mir jemand helfen könnte. Siehe im Anhang die Exceldatei
Ich kann nur für mich sprechen aber ich verstehe den Sinn dahinter nicht. Warum zuerst was in ein Steuerelement legen, dann wieder wo anders hinbewegen, anhand von welchen Kriterien werden die Bilder ausgewählt? Warum soll überhaupt Excel verwendet werden?, was soll denn berechnet werden?
In PP könnten auf einen Schlag hunderte von Bildern eingefügt werden, (Fotoalbum) die Reihenfolge kann gewählt werden -> danach exportieren als Handzettel nach Word -> die Abbildungen beschriften -> Deckblatt hinzufügen und als PDF ablegen.
Im Anhang befindet sich die Datei (der Musterkatalog) Zur Erklärung: Im Tabellenblatt "1.ET_KATALOG" befindet sich der eigentliche Katalog. In diesem können die Produkte beliebig ausgewählt werden. In Spalte B kann das Fabrikat ausgewählt werden, in Spalte C das Produkt welches vom zuvor ausgewählten Fabrikat abhängt. Zu jedem Produkt gibt es auch ein Bild (dazu später) Im Tabellenblatt "2.FABRIKATE" können Produkte dem Katalog hinzugefügt werden. Will ich nun ein Produkt hinzufügen so muss ich z.B. bei Fabrikat "AA" in Zelle A4 unter dem bereits eingetragenen Produkt "AA1" ein neues Produkt definieren. In Spalte C, E, und F kann man das Produkt beschreiben.
In Spalte D (und jetzt komm ich schon zu den Produktbildern) fügt sich nach Eingabe einer neuen Type automatisch die nächst höhere Produktzahl ein --> in Zelle A2 steht die aktuelle Anzahl der Produkte "25" - welche nach Eingabe in Zelle C6 dann auf "26" springt. Diese Nummern dienen der Zuordnung von Bildern (welche sich im Tabellenblatt "BILDER" befinden). Die Nummer "2" heisst also dass sich das dazugehörige Bild in Zelle A2 befindet, Bild "3" in Zelle A3, usw... Macht man dies nicht so findet Excel im Tabellenblatt "1.ET_KATALOG nicht das passen Bild zum Produkt. Diese Nummern werden mittels SVerweis im Katalog in Spalte G angezeigt.
Aufgrund des Datenschutzes musste ich diese Liste und deren Produkte geringfügig verändern um diese ins Forum zu stellen. Soviel zum Musterkatalog
Nun zu meinem Eigentlichen Anliegen. Ich habe nun im Tabellenblatt "BILDER" fünf Bilder eingefügt (Zelle A1 bis A5). Möchte ich nun ein neues Produkt einfügen muss ich natürlich auch ein neues Bild einfügen. Diesen Weg würde ich mir erheblich erleichtern wenn den im ersten Beitrag von gestern beschriebenen Vorgang irgendwie in diesen Katalog bringen würde.
Ich hoffe jetzt ist das ganze etwas klarer geworden.
21.04.2015, 15:40 (Dieser Beitrag wurde zuletzt bearbeitet: 21.04.2015, 15:40 von chris-ka.)
Hallo Chris,
da muss ich passen, ich komme mit dieser Usability nicht zurecht. Das was Du da machst ist reine "Handarbeit" dies zu automatisieren wäre mit immensen Aufwand verbunden. Alle Bilder mit Namen zu versehen dann Indirekt Funktionen darauf zu belegen..., mit Zellbezügen die in deiner Bsp.mappe ins Leere laufen. (Zellen aus Spalte G) Irgendwann wirst du dabei komplett die Übersicht verlieren die Datei wird vom Speicher her immer größer werden, deine doppelten Sverweise (Wird den noch Excel 2003 verwendet?, denn ab 2007 gibt es Wennfehler), Bilder, Indirekt bremsen die Mappe vielleicht noch auf "Stillstand".
Ich habe schon einiges mit Bilder in Excel gemacht, händisch für ein paar Bilder wie Du auch, aus dem Internet Bilder eingelesen, oder per Dropdown über Code eingefügt. Hier eine Demo die ich vor einiger Zeit in einem anderen Forum hatte.
NUR ist das ganz anders aufgebaut wie du es im Moment hast....
21.04.2015, 16:55 (Dieser Beitrag wurde zuletzt bearbeitet: 21.04.2015, 16:55 von schauan.)
Hallo Chris-89,
Wenn Du Deine Exceldatei mit einem Bilderkatalog füllst und anschließend noch Kopien der Bilder in die einzelnen Projekte, hast Du irgendwann eine megagroße Exceldatei, die der Eine oder Andere vielleicht schon kaum noch aufbekommt, wenn sein Rechner nicht gerade die aktuellste Hardware hat. Falls Du die Datei mal per email versenden willst, kann es zudem passieren, dass sie bei Dir oder beim Empfänger zu groß ist ...
Ich habe das bei mir mal so gelöst, dass ich die Bilder ins gleiche Verzeichnis wie meine Exceldatei gelegt und mit einem passenden Namen versehen habe. In der Exceldatei habe ich dann per Formel einen Hyperlink erzeugt. Die User konnten sich dann bei Bedarf durch Anklicken des Hyperlinks das Bild öffnen und anschauen. Den Speicherort der Exceldatei als ersten Bestandteil der Hyperlinkformel habe ich im Blatt per Formel ermittelt. In einer Zelle habe ich den Dateinamen eingegeben, den hat sich die Hyperlinkformel als zweiten Bestandteil geholt. Die Extension jpg war fest gesetzt.
Zum Versenden habe ich dann das Verzeichnis mit der Exceldatei und den Bildern gezippt und ans email angehängt. Wo die der Adressat dann hingelegt hat, war ja egal, weil ich den Pfad ja per Formel ermittle.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Hallo, Danke mal für eure Meinungen und Ratschläge,
Das mit den Hyperlinks hatten wir zuvor, das war leider das reine Chaos. (Warum kann ich euch nicht sagen)
Bzgl. der Datengröße hab ich schon eine Lösung. Der Katalog wird bei zu großer Datenmenge einfach auf die Gewerke gesplittet, soll heißen dass es dann halt mehrere Kataloge gibt. Zu dem File von dir Chris - ja das kenne ich - das ist die simple Variante, nach diesem Prinzip arbeitet meine Liste (nur etwas aufwendiger).
Der Musterkatalog wird niemals (darf auch nicht) als Excel File verschickt, da dieser auf dem Server liegt und andere darauf (aufgrund der sich ständig ändernden Preisbasis) keinen Zugriff haben dürfen - nur Mitarbeiter. Der Katalog wird ausschließlich in Papierform bzw. als PDF verschickt.
Naja... Ich verstehe eure Argumente, und werde die Bilder zukünftig einfach per "Hand" einfügen müssen.
Wenn sich trotzdem noch jemand zu meinem Problem einfinden will, wäre ich dem- bzw. derjenigen nicht böse :)
Ansonsten wäre eine Lösung via Befehlsschaltfläche zum übertragen von Pics in ein anderes Tabellenblatt sicher eine (für dieses, und auch andere Foren) herausfordernde Sache die zu lösen es sich eventuell sogar lohnt :18:
22.04.2015, 18:19 (Dieser Beitrag wurde zuletzt bearbeitet: 22.04.2015, 18:21 von schauan.)
Hallo Chris-99,
es ging nicht darum, dass wir nicht wollen oder konnten, sondern dass wir erst mal Alternativen gesucht haben, die sich zu betrachten vielleicht auch lohnt
Ich hätte hier mal eine Variante. Die funktioniert so, dass Du in die Zelle, wo das Bild rein soll, den Namen des Bildes eingibst und dann wird es automatisch rüber kopiert. Ich habe das mal allgemein auf Spalte A als Eingabespalte und Tabelle2 als Bildersammlung programmiert, kannst Du noch anpassen. Der code kommt in das Modul des Tabellenblattes, wo die Einträge erfolgen und die Bilder rein sollen
Code:
Private Sub Worksheet_Change(ByVal Target As Range) 'Wenn etwas anderes gewaehlt wurde als eine einzelne Zelle in Spalte A, dann Sub verlassen If Target.Column <> 1 Or Target.Rows.Count > 1 Or Target.Columns.Count > 1 Or Target.Value = "" Then Exit Sub 'Objekt, z.B. Bild, mit dem eingegebenen Namen von Tabelle 2 kopieren 'Hinweis: Fehlerbehandlung ergaenzen, falls Objekt mit eingegebenem Namen nicht existiert Sheets("Tabelle2").Shapes(Target.Value).Copy 'In Zielzelle einfuegen Target.PasteSpecial 'mit dem eingefuegten Objekt With Selection 'Sperrung des Seitenverhaeltnis aufheben 'Hinweis: wenn keine Verzerrung gewuenscht, dann belassen. .ShapeRange.LockAspectRatio = msoFalse 'Groesse auf Zellgroesse anpassen 'Hinweis: bei gesperrtem Seitenverhaeltnis ist u.U. eine 'Berechnung notwendig .Width = Target.Width .Height = Target.Height 'Ende mit dem eingefuegten Objekt End With End Sub
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Danke für den Code, bekomme da aber leider einen Fehler. Du hast im Code folgenden Hinweis geschrieben "'Hinweis: Fehlerbehandlung ergaenzen, falls Objekt mit eingegebenem Namen nicht existiert" das ist, so vermute ich der Grund für den Fehler den ich habe. Was meinst du damit.
Also ich bin in Tabelle 2 und hab ein Bild in Zelle A1 eingefügt und in der Zelle mit "Bild1" benannt. Dann bin ich in Tabelle1 und hab ebenfalls in Zelle A1 den Namen "Bild1" geschrieben. Dann der Fehler:
VBA markiert den Bereich
Sheets("Tabelle2").Shapes(Target.Value).Copy
(Ich hab natürlich darauf geachtet dass Tabelle2 auch im Excel so heisst. ;) )
hmmm.... :) bitte bedenke, du sprichst hier mit einem VBA Laien. Danke!
Ahh,... ich hab den Fehler geschnallt. Es geht um den Bildnamen z.B. "Grafik 1"... Dann wird das Bild sauber eingefügt.
Gefällt mir schon sehr gut. Funktioniert das auch mit einem Steuerelement "Bild"?
Das Tabellenblatt in welches die Bilder eingefügt werden möchte ich gar nicht mehr angreifen, dieses soll lediglich als verstecktes (ausgeblendetes) Tabellenblatt dienen Das würde bedeuten dass ich die Beschriftung der Zellen, in denen das Bild eingefügt werden soll, automatisieren muss. Da aber die Grafiken die ich im Einfügeblatt immer wieder von "Grafik 1" starten und nicht fortlaufend sind (zumindest nicht nach neu öffnen der Datei) kann ich das nicht automatisieren.
Wenn das also mit einem Steuerelement, welches nach dem Code untenstehend arbeitet, funktionieren würde, dann hieße das zu übertragende Bild immer "Image1". Das wiederum kann man mit einer einfachen Wenn Formel automatisieren. Ich hoffe das war verständlich genug.
Hier der Code für das Bild Steuerelement:
Code:
Private Sub Image1_Click() Dim fd As FileDialog Dim Pfad As String Dim chosenFile As String Pfad = "C:\Daten\" Set fd = Application.FileDialog(msoFileDialogFilePicker) With fd .AllowMultiSelect = False .InitialFileName = Pfad .Filters.Add "Bilddateien", "*.jpg" If .Show = -1 Then chosenFile = .SelectedItems(1) With Me.Image1 .PictureSizeMode = fmPictureSizeModeStretch .Picture = LoadPicture(chosenFile) End With End If End With End Sub
Des weiteren ist mir aufgefallen dass das eingefügte Bild immer in Zelle Links oben ausgerichtet wird. (Nachdem man die Einfüge Größe des Bildes im Code ändert). Kann man das Bild irgendwie in der Zelle zentrieren?