1. Warum willst Du denn den Katalog ausblenden? Da sind ja auch Schaltflächen drin, die kannst Du dann nicht benutzen. 2. Was hat man denn davon, wenn die Bilder in ein ausgeblendetes Tabellenblatt kommen - da sieht man sie doch nicht? 3. Woher soll denn der code wissen, wo das Bild in deinem ausgeblendeten Katalog hin soll? 4. Mit Deinem code lädst Du ein Bild aus einer Datei. Du hast am Anfang aber geschrieben, dass Du es aus dem Blatt "Bilder" in den Katalog holst 5. Warum fügst Du das Bild in das Steuerelement ein und nicht gleich in den Katalog?
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Zu deinen Fragen: 1. Den Katalog will ich nicht ausblenden, ich will das Tabellenblatt Bilder ausblenden, da dies nur der allgemeine Speicher mit der Zuordnung der Nummerierung zum Katalog ist. Der Katalog holt sich die Bilder quasi aus diesem Tabellenblatt. 2. Weil (wie in Punkt 1 beschrieben) dieses Tabellenblatt "Bilder" lediglich als Speicher dienen soll 3. und 4. Im Tabellenblatt "Fabrikate" soll das Bild nach Eingabe eines neuen Produktes vom Explorer geladen werden. Der Code den ich brauche, soll das geladene Bild im Speicher (Tabellenblatt "Bilder") einfügen, damit die Zuordnung im Katalog mit der Nummerierung der Produkte zusammenstimmt. 5. Weil das der Sinn dieser Liste ist. Der Katalog soll als Datenbank dienen. D.h. Wenn ein neues Produkt eingetragen wird, dann wird auch ein neues Bild eingefügt. Die Datei wird im Anschluss wieder abgespeichert und das zuvor eingegebene Produkt kann von anderen Usern im Katalog ausgewählt werden.
Ziemlich kompliziert zu erklären. Wenn das nicht lösbar ist, hab ich auch kein Problem, dann bleibt der Katalog eben so wie er ist.
es ist trotzdem noch nicht ganz klar. Wo ist denn das Bilder-Steuerelement für den Import enthalten? Im Blatt Fabrikate ist es nicht. Im Katalog wolltest Du ja ein Bild aus dem Blatt Bilder einfügen, da ist es also schon in der Datei drin und braucht nicht mehr importiert zu werden.
Wie viele Bilder-Steuerelemente verwendest Du denn dann, wenn die Bilder in die Steuerelemente sollen und nicht direkt in die Datei? Wofür sie unbedingt in Steuerelemente sollen, erschließt sich mir auch noch nicht.
Beschreibe doch einfach mal schrittweise, wie Du das Ding handelst bzw. was genau passieren soll. z.B. Bild importieren Du öffnest die Datei, gehst auf das Blatt xxx, drückst die Schaltfläche yyy, ein Dialog für irgendwas geht auf, du wählst eine Bilderdatei vom Speichermedium aus, auf dem Blatt zzz wird ein neues Bildersteuerelement erzeugt und das Bild darin eingefügt.... ET_Katalog erweitern Du gehst auf das Blatt ET_Katalog, gibst eine neue Positionsnummer ein, gibst in Spalte B einen Bildernamen ein, danach wird automatisch ein Bild aus dem Blatt Bilder geladen, ... usw.
Gleich noch ein Hinweis zum Positionieren und Skalieren. Eine Zelle hat die Eigenschaften Top und Left sowie With und Height, ebenso in Bild. Der Rest ist Mathematik Du gibst beim Bild bei Top und Left 1 dazu, und ziehst dafür bei Width und Height 2 ab.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Also jetzt nochmal ganz im Detail und schrittweise:
Es gibt 4 Tabellenblätter: 1.ET_KATALOG: In diesem Tabellenblatt wird im Dropdown (zwischen Spalte F und G) ein Gewerk ausgewählt (AAA; BBB; CCC; DDD oder EEE) Danach wird in Spalte B (Fabrikat/Bild) Der Hersteller gewählt (AA; BB; CC; DD; EE), danach wird in Spalte C das Produkt des jeweiligen Herstellers gewählt (AA1; BB1;...) - das alles via Dropdown Menüs. Der Rest des Produktes (Beschreibung, Type, usw.) wird automatisch via SVerweise auf das Tabellenblatt "2.FABRIKATE" ausgefüllt. Die Bilder (in Spalte B) sind verknüpft mit dem Tabellenblatt "Bilder" und "2.FABRIKATE" Die genaue Zuordnung dieser Bilder erfolgt über die Nummerierung die in Spalte G steht (Wert 1 = Bild 1 - in Zeile 1 vom Tabellenblatt "Bilder", usw...) Somit wäre eine ProduktAUSWAHL im Katalog abgeschlossen.
2.FABRIKATE: Dieses Tabellenblatt benötigt man erst dann, wenn man ein neues Produkt dem Katalog hinzufügen möchte. Hier ein Beispiel: Beim Hersteller AA wird ein neues Produkt mit dem Namen AA2 eingefügt. Der Wert AA2 (die Produktbeschreibung) wird in Spalte A eingegeben, die Type dieses Produktes (AA2.1) in Spalte C. Daraufhin wird durch ein Makro in Spalte D die nächst höhere Nummer eingegeben. (in diesem Fall der Wert 26) Diese Zahl stellt den Bezug zum Bild im Tabellenblatt "Bilder" her. Folglich befindet sich das Bild zu diesem Produkt in Zeile A26 im Tabellenblatt "Bilder" und muss dort auch irgendwie eingefügt werden. Diesen Schritt hätte ich nun gerne mittels Steuerelement "Bild" (dieses befindet sich noch nicht im Tabellenblatt) damit ich nicht im Tabellenblatt "Bilder" ganz nach unten scrollen muss und mir die passende Zeile (A26) zu suchen, möchte ich das automatisieren. Wenn ich also ein Bild dem Produkt mit der Nummer 26 einfügen will dann soll das über das Steuerelement geladen werden können und dann mittels Schaltfläche genau in die Zeile A26 im Tabellenblatt "Bilder" hüpfen.
4.HERSTELLERLISTE: Dieses Tabellenblatt ist für unseren Sachverhalt unrelevant. Hier kann ein neuer Hersteller bzw. ein neues Gewerk hinzugefügt werden.
hier mal ein code zum Einfügen von Bildern auf das Bilder-Blatt. Der code ist auf Basis von Deinem angepasst. Damit das funktioniert, habe ich in Spalte B noch die Bildbezeichnung eingetragen, wo schon Bilder drin waren (Grafik 1 bis 5) - müsstest Du bei Dir nachholen. Mit dem code wird dann geprüft, wo der letzte Eintrag ist und dann in die nächste Zeile das gewählte Bild eingefügt, umbenannt und der Namenseintrag daneben geschrieben. Und ich habe hier, wie gesagt, kein Steuerelement. Die Skalierung und Positionierung fehlt noch - schau erst mal, ob das mit dem Einfügen in Deinem Sinne ist.
Es wäre auch vorteilhaft, hier noch den "Namen" für den Bezug anzulegen. Du hast ja im Moment eine ganze Menge vorgetragen. Das bräuchtest Du dann nicht.
Code:
Private Sub Insert_Image() Dim fd As FileDialog Dim Pfad As String Dim chosenFile As String Pfad = "C:\Test\" Set fd = Application.FileDialog(msoFileDialogFilePicker) With fd .AllowMultiSelect = False .InitialFileName = Pfad .Filters.Add "Bilddateien", "*.png" If .Show = -1 Then chosenFile = .SelectedItems(1) 'mit dem Blatt "Bilder" With Sheets("Bilder") 'Zelle in Spalte A unter Zelle mit letztem Eintrag in Spalte B aktivieren Cells(Cells(Rows.Count, 2).End(xlUp).Row + 1, 1).Activate 'Bild einfuegen und selektieren ActiveSheet.Pictures.Insert(chosenFile).Select 'Bild umbenennen Selection.Name = "Grafik " & Cells(Rows.Count, 2).End(xlUp).Row + 1 'hier noch ausrichten und skalieren programmieren '... 'neben dem Bild den Name eintragen ActiveCell.Offset(0, 1).Value = "Grafik " & ActiveCell.Row 'Ende mit dem Blatt "Bilder" End With ' With Me.Image1 ' .PictureSizeMode = fmPictureSizeModeStretch ' .Picture = LoadPicture(chosenFile) ' End With End If End With End Sub
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
27.04.2015, 18:49 (Dieser Beitrag wurde zuletzt bearbeitet: 27.04.2015, 18:58 von schauan.)
Hallo Chris,
da nimmst Du einfach eine Schaltfläche, z.B. die, wo "Bilder" drauf steht? Übrigens geht mein code davon aus, dass Du die Bilder schön der Reihe nach einfügst - also musst Du vor dem Bild 26 die anderen 25 schon drin haben. Ansonsten muss man noch eine Abfraqe rein programmieren, welche Nummer es sein soll und eine Prüfung, ob Du ein eventuell unter dieser Nummer bereits vorhandenes Bild ersetzen willst.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
OK also das funktioniert ja super. Besten Dank schon mal. Bzgl. Skalierung und Positionierung: Die Bilder sollten etwas kleiner als die Zelle in Spalte A sein (so wie in meiner Mappe Bild 1 bis 5) Wie realisieren wir das nun?
Es gibt auch noch ein Thema: Die meisten Bilder sind im Querformat zum einfügen, es kann jedoch schon mal vorkommen das man Bilder im Hochformat einfügen muss. Wie realisiert man das mit VBA?
Die Positionierung und Skalierung ist, wie ich schon schrieb, fast nur Mathematik. Wenn Du das Prinzip mathematisch beschreiben kannst, dann ist die Programmierung nur noch ein kleiner Schritt.
Dazu gibt es noch die Frage, ob das Seitenverhältnis der Bilder beibehalten werden soll oder verkleinert. Das hatte ich schon im Kommentar im code von Beitrag #8 drin, bei der Verkleinerung auf Zellgröße. Im letzten code von mir hab ich kein Target, jetzt geht es um die ActiveCell.
Im Beitrag #13 hab ich erklärt, wie man das Bild etwas kleiner und zentriert bekommt.
Wenn Du das Seitenverhältnis beibehalten willst, dann stellst Du z.B. erst mal die Breite ein. Anschließend prüfst Du, was bei der Differenz der Höhe zur Zellhöhe rauskommt.
Ist die Höhe mindestens zwei kleiner als die Zellhöhe - um mal bei meinem Beispiel aus #13 zu bleiben, musst Du das Bild nur in der Höhe zentrieren. Der zum Top-Wert der Zelle zu verrechnende Wert wäre dann der halbe Differenzbetrag der Höhe.
Ist die Höhendifferenz kleiner als zwei oder das Bild in der Höhe sogar noch größer als die Zelle, musst Du nochmal skalieren. Anschließend musst Du jedoch die Breitendifferenz ermitteln - das Bild ist ja durch das erneute Skalieren schmaler geworden und daher auch nicht mehr in der Mitte der Zelle. Von der Breitendifferenz musst Du die Hälfte mit dem Left-Wert der Zelle verrechnen.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)