Hallo Gemeinde,
inzwischen habe ich mir für die Textfarbe in einer Zelle sowie den Eingabebereich für ein Kombinationsfeld (Formularsteuerelement) bereits Lösungen für den Bezug auf Daten in einer anderen Mappe erarbeitet.
Bleiben also "nur noch" die Schaltflächen.
Da jedoch meine umständliche Heranführung an das Ganze meine Posts in diesem Thread bereits ziemlich anstrengend zu lesen machen, habe ich für die noch offenen Punkte um die Schaltflächen einen neuen Thread eröffnet.
Für Interessierte ab hier noch der alte Text:
püh, den Betreff so einzudampfen, dass in noch halbwegs verständlichem Deutsch alles drinsteht, war schon ein bisschen tricky.
Gleich vorab: das hier beschriebene Konstrukt aus Arbeits- und Daten-Tabelle funktioniert seit Jahren zuverlässig, aktuell geht es "nur" um eine Art Feinschliff, um demnächst anstehende (und zukünftige) umfangreichere Wartungsarbeiten wegen der Umstellung unseres Produktportfolios etwas geschmeidiger durchführen zu können. Ach so: auch wenn das angesichts der Grundsätzlichkeit einiger meiner Fragen in diesem Post vielleicht ein wenig zweifelhaft erscheint - all das VBA-Code-Geschnetzelte, das bisher bereits wirklich gut funktioniert, ist über die Jahre mit heftiger Hilfe durch die hiesige Gemeinde von mir selbst erstellt worden
In der Arbeitstabelle.xlsm werden mittels Makros aus der IMMER zuerst geöffneten Datentabelle.xlsx auftragsbezogen Stammdaten, Abbildungen und Tabellen mit einer voreinstellbaren Zeilenanzahl für Profile, Bauteile, FLUTZ-Halbzeuge usw. zu einer Tabelle zusammengesetzt, über die dann ebenfalls auftragsbezogene Gesamtauswertungen laufen - und wie gesagt: funktioniert alles.
In der Arbeitstabelle gibt es für die verschiedenen Produktbereiche in einer 4*6-Matrix angeordnet insgesamt 24 Dreierblöcke aus (Kopf)Zelle, PullDown-Menü und Makro-Start-CommandButton (siehe Bild ... bitte entschuldigt mein mit-Maus-in-Paint-Gekrakel), deren Text-Inhalt und Textfarbe für die Zelle, Auswahlbereich für das Menü sowie Beschriftung, Textfarbe und angesteuertes Makro für den CommandButton bisher komplett händisch eingetragen und bei Bedarf auch geändert wurden - so z.B. auch die Anpassung der Datenblock-Nummer in den betroffenen Makros.
Der erste Dreierblock in der Arbeitstabelle.xlsm greift auf den ersten Datenblock auf dem Tab "Listen" in der Datentabelle.xlsx zu, der zweite auf den zweiten usw. usf. - das soll auch genauso bleiben, selbst wenn ich innerhalb der Datentabelle die Reihenfolge/den Inhalt/die Größe eines Datenblocks (siehe Bild) geändert hätte.
Die (Kopf)Zelle dient nur der Benennung des jeweiligen Dreierblocks. Die Textfarbe dient als "Kodierung" des jeweiligen Lieferanten/Herstellers, ist jedoch relativ unwichtig ... aber wenn sie am Ende auch passen würde, wär's nice.
Das PullDownMenü dient zur Auswahl eines bestimmten Artikels aus der jeweiligen Produktgruppe (im Beispiel: Bauteile) und legt die gewählte Zeile aus dem Eingabebereich in der obersten rechten Zelle des jeweiligen Daten-Blocks auf dem Tab "Listen" in Datentabelle.xlsx ab (im Beispiel: 1).
Der CommandButton ruft ein Zugriffs-Makro auf, das wiederum ein Makro zum jeweiligen Produkt-Typ aufruft und dabei die Daten-Block-Nummer übergibt (im Beispiel: 8 ... bisher dort händisch in die Klammer geschrieben, weil ich die Methode bzw. die notwendige Syntax zur Übergabe einer solchen Zahl (auch nach eventueller Änderung) nicht kenne)
Die Zugriffs-Makros haben bisher diese Struktur:
Code:
' Bereich BauteileSub Sub08_gewähltes_Bauteil_einfügen_Klicken()
Call Sub91_Stückgut_einfügen(8) 'Bauteile sind Stückgut und auf "Listen" der 8. Block
End Sub
Hierzu gleich zwei Änderungswünsche:
- ich würde den Sub/Makro-Namen gern von "Sub08_gewähltes_Bauteil_einfügen_Klicken()" auf "Sub08_gewähltes_Bauteil_einfügen()" oder "gewähltes_Bauteil_einfügen()" ändern, bin aber unsicher, ob z.B. das "_Klicken" zwingend notwendiger Bestandteil des Makro-Namens für CommandButton-Klicks ist und inwieweit die bisherige Durchnummerierung der Subs nach einem eventuellen Vertauschen von Datenblöcken überhaupt noch sinnvoll wäre
- wie bekomme ich die händisch eingetragene Daten-Block-Nummer (8) mit Bezug auf eine eventuell geänderte Anordnung der Datenblöcke auf Listen in der Datentabelle.xlsx umgesetzt ... den Kommentar würde ich entsprechend "entschärfen"
Mit der übergebenen Datenblock-Nummer wird dann in dem jeweiligen Produkt-Typ-Makro (im Beispiel: Sub91_Stückgut_einfügen(xWert As Integer) ) der Kopfbereich des jeweiligen Datenblocks (im Beispiel: 8) sowie die Anzahl der gewünschten Tabellenzeilen aus einer Zelle in der Arbeitstabelle.xlsm in Variablen befüllt und dann die Daten und Abbildungen von den entsprechenden Produkt-Typ-Tab in Datentabelle.xlsx (im Beispiel: Bauteile) nach Arbeitstabelle.xlsm kopiert und die jeweilige Tabelle mit der gewünschten Zeilenanzahl und Kopf- und Summenzeilen erzeugt.
Da sich allerdings der Inhalt/die Reihenfolge der Daten-Blöcke (wieder: siehe Bild) in der Datentabelle.xlsx in absehbarer Zeit erheblich ändern soll/wird, ist mein Ziel, diese bisher händisch eingtragenen Werte beim Start der Arbeitstabelle.xlsm aus der Datentabelle.xlsx zu beziehen, sodass sich die 24 Dreierblöcke auch bei zwischendrin erfolgten Änderungen in der Datentabelle automatisch daran anpassen. Dies soll zukünftig auch erleichtern, mit älteren Versionen (NACH dieser Umstellung) der Datentabelle erstellte auftragsbezogene Listen bearbeiten zu können ... aktuell muss dazu immer die zur Version der damals verwendeten Arbeitstabelle passende Datentabelle "rekonstruiert" werden.
Die einzige (einfachste) Sache, die ich hinbekommen habe, ist der Textinhalt der (Kopf)Zelle:
z.B. "= [Datentabelle.xlsx]Listen!$A$1" direkt in der (Kopf)Zelle, wobei Listen der Daten-Verwaltungs-Tab ist, auf dem alle 24 Datenblöcke stehen
Bei einigen der anderen Sachen habe ich zumindest schon Ansätze gefunden, dass es irgendwie geht/gehen müsste, kriege es aber mangels Grundlagenwissen zu VBA-Programmierung und Befehls-Syntax bisher nicht wirklich umgesetzt (ich habe mir deshalb jetzt Michael Koflers "Excel programmieren 2016" bestellt, aber selbst wenn das dann da ist, muss ich erst einmal anfangen(!) zu lernen )
Bei den Auswahlbereichen der PullDown-Menüs schwebt mir eigentlich als Eintrag im Feld "Eingabebereich" unter "Steuerelement formatiern" so etwas vor:
[Datentabelle.xlsx]Listen!$A$5:INDIREKT("$" & A & "$" & [Datentabelle.xlsx]Listen!$B$2 + 4)
funktioniert aber nicht mit der Fehlermeldung "Bezug ist ungültig", während
[Datentabelle.xlsx]Listen!$A$5:$A$45
(bei z.B. 41 Zeilen im Eingabebereich) ohne Beanstandung funktioniert.
z.B. zu den CommandButtons:
zu Text/Beschriftung: CommandButtonXYZ.Caption = Range("...")
oder
zur Textfarbe: Worksheets("ABC").OLEObjects("CommandButtonXYZ").Object.ForeColor = ???
Was ich inzwischen begriffen (zu) habe(n glaube): die Makros für diese Aktionen sollten am besten in dem Makro-Code-Fenster zu dem Tabellenblatt (ABC) der Arbeitstabelle.xlsm stehen, auf dem sich die 24 Dreierblöcke befinden.
Aber wie ich für die CommandButtons die jeweilige laufende(?) Nummer "YXZ" (einfach) herausbekomme ist mir nicht klar, genau wie die exakt zu verwendende, korrekte Syntax.
Für einen der Buttons habe ich mal versucht, mittels des Makro-Rekorders ein paar Sachen herauszufinden ... der Button wurde dort als CommandButton1235 geführt ... und auch wenn ich im Lauf der Jahre sicherlich mehrfach solche Buttons ausprobiert und wieder gelöscht habe (teilweise nach Umbeschriftung auch aus Versehen), bin ich noch nicht annähernd bei über Tausend dieser Knöpfe.
Und als ich im Code-Fenster für den Tab mit den Dreierblöcken erst einmal nur "CommandButton1235.Caption = Range("J8")" geschrieben hatte, bekam ich bei der ersten Änderung auf diesem Tab eine "Microsoft Visual Basic" übertitelte Fehlernachricht "Laufzeitfehler '424'; Objekt erforderlich ... beim Klick auf Debuggen zeigt er mir die obige Zeile in Gelb.
Den ersten Fehler dabei habe ich jetzt verstanden: ich hatte die Zeile "aus Versehen" in das dort bereits existierende Makro "Sub Worksheet_Change(ByVal Target As Excel.Range)" hineingeschrieben, das bei einer Änderung in einer bestimmten Zelle etliche Druckeinstellungen vornimmt ... eigentlich will ich jedoch die Aktionen für die 24 Dreierblöcke (ein Makro? 24 Makros? 24 * X Makros?) nur beim Öffnen dieser Exceldatei ausführen lassen, damit sie an den aktuellen Stand der Datentabelle.xlsx angepasst wird. Danach können diese Aktionen "ruhen". Aber wie/wo ich das Ganze dann hinschreiben muss: Hüüülfäää
Gleiches gilt für die Syntax für Range("...") mit Bezug auf eine andere Exceldatei ... da habe ich in Zellen in einer Exceltabelle verschiedenes ausprobiert, aber dort funktionierende Syntax scheint nicht zwingend auch für Makros korrekt zu sein.
Wer also zu einem der offenen Punkte Hilfe anbieten kann, herzlich willkommen:
- Textfarbe in (Kopf)Zelle ... Format der Farb-Hinterlegung auf Listen in Datentabelle.xlsx bisher nur als RGB-Beispiel
- Eingabe- bzw. Auswahlbereich für das PullDown-Menü
- Nummer des CommandButtons
- Beschriftung des CommandButtons
- Textfarbe der Beschriftung (soll dieselbe Farbe wie die des Texts in der (Kopf)Zelle sein)
- mit Klick auf den CommandButton angesteuertes Makro
- Übergabe der aktuellen Daten-Block-Nummer an das Produkt-Typ-Makro (siehe Bild)
So, mangels Wissen habe ich wahrscheinlich immernoch etliche Sachen vergessen, aber das ist halt das, was mir bis jetzt so ein/aufgefallen ist und ich habe momentan das Gefühl, würde ich noch mehr schreiben, stünde es bereits irgendwo weiter oben im Text .
Grüße
Gernot
[EDIT] kleinere (Rechtschreib-)Korrekturen, Umformulierungen und zusätzliche Erläuterungen und PS.: wer andere Literatur-Empfehlungen hat: nur her damit
[Diese Nachricht wurde von ArCADe-Spieler am 25. Okt. 2023 editiert.]
[Diese Nachricht wurde von ArCADe-Spieler am 26. Okt. 2023 editiert.]
[Diese Nachricht wurde von ArCADe-Spieler am 17. Nov. 2023 editiert.]
[Edit] für die Suchfunktion auf "Eingabebereich für ein Kombinationsfeld (Formularsteuerelement)" geändert
[Diese Nachricht wurde von ArCADe-Spieler am 25. Nov. 2023 editiert.]
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP