22.09.2016, 13:30
Hallo Leute! Ich stehe gerade vor einem ziemlich komplexen Problem: Ich habe eine große Produktkalkulation mit mehreren Tabellenblättern.
In einem 'Haupt'blatt gibt es die Möglichkeit neue Produktvarianten hinzuzufügen. Über eine Inputbox wird eingegeben, welcher Typ neu dazu kommt. Das Wichtige ist dabei, dass die Produkte horizontal nebeneinander hinzugefügt werden und die Typen jeweils hintereinander stehen sollen. Das heißt, es kann nicht die Reihenfolge "Typ A" "Typ B" "Typ A" geben, sondern "Typ A" "Typ A" "Typ B". Das Problem habe ich bereits gelöst.
Der knifflige Part kommt jetzt aber erst: Wenn in dem Hauptblatt neue Produkte hinzugefügt werden, sollen auf mehreren anderen Tabellenblättern ebenfalls neue Kalkulationsvorlagen eingefügt werden. Das Prinzip mit der Reihenfolge ist wieder das gleiche. Die Funktion hab ich auch bereits programmiert. Schwierig wird es jetzt aber bei der Formelverlinkung - und hier hänge ich fest:
Die neu eingefügten Kalkulationsvorlagen in den anderen Tabellenblättern, nennen wir eine davon mal "Zubehör", sollen auf neu geschaffene Zellen in dem Hauptblatt verlinken. Das ganze muss ein absoluter Bezug sein, da ja ständig neue Produkte hinzukommen können und sich somit die jeweiligen Spalten ständig verschieben.
Ich weiß wie ich per Makro Formeln in Zellen einfügen kann, nur stellt sich jetzt die Frage, wie ich die jeweiligen Spaltenbezüge dynamisch absolut verlinken kann.
Ein einfaches Beispiel für einen Makro zum Formeleinfügen sieht ja so aus:
Sheets("MakroTest").[A1].Formula = "=B1+C1"
Da ich ja eh nur zu den jeweiligen neuen Zellen verlinken muss, dürfte das eigentlich gar nicht so schwer sein. Vor allem da auch die Zeilen konstant sind, weil es nur in die horizontale erweitert wird.
Mein Pseudocode würde also lauten:
Sheets("Zubehör").[Spalte, die neu geschaffen wurde &Zeile(?? z.B. 2)].Formula = "='Hauptblatt'![Spalte, die neu geschaffen wurde &Zeile(Zielzeile)]"
Alternativ habe ich mir das mit Cells vorgestellt:
Sheets("Zubehör").Cells(2,Columns(spaltenIndex)).Formula = "='Hauptblatt'!Cells(Zielzeile, Columns(spaltenIndexHauptblatt)"
Aus dem existierenden Programm habe ich den Spaltenindex ermittelt, in der das neue Produkt eingefügt wurde. Mein Ansatz wäre damit zu arbeiten. Es gibt ja Bezüge, wie z.B. Columns(spaltenIndex). Leider funktioniert mein Ansatz nicht. Weiß jemand einen Ansatz?
In einem 'Haupt'blatt gibt es die Möglichkeit neue Produktvarianten hinzuzufügen. Über eine Inputbox wird eingegeben, welcher Typ neu dazu kommt. Das Wichtige ist dabei, dass die Produkte horizontal nebeneinander hinzugefügt werden und die Typen jeweils hintereinander stehen sollen. Das heißt, es kann nicht die Reihenfolge "Typ A" "Typ B" "Typ A" geben, sondern "Typ A" "Typ A" "Typ B". Das Problem habe ich bereits gelöst.
Der knifflige Part kommt jetzt aber erst: Wenn in dem Hauptblatt neue Produkte hinzugefügt werden, sollen auf mehreren anderen Tabellenblättern ebenfalls neue Kalkulationsvorlagen eingefügt werden. Das Prinzip mit der Reihenfolge ist wieder das gleiche. Die Funktion hab ich auch bereits programmiert. Schwierig wird es jetzt aber bei der Formelverlinkung - und hier hänge ich fest:
Die neu eingefügten Kalkulationsvorlagen in den anderen Tabellenblättern, nennen wir eine davon mal "Zubehör", sollen auf neu geschaffene Zellen in dem Hauptblatt verlinken. Das ganze muss ein absoluter Bezug sein, da ja ständig neue Produkte hinzukommen können und sich somit die jeweiligen Spalten ständig verschieben.
Ich weiß wie ich per Makro Formeln in Zellen einfügen kann, nur stellt sich jetzt die Frage, wie ich die jeweiligen Spaltenbezüge dynamisch absolut verlinken kann.
Ein einfaches Beispiel für einen Makro zum Formeleinfügen sieht ja so aus:
Sheets("MakroTest").[A1].Formula = "=B1+C1"
Da ich ja eh nur zu den jeweiligen neuen Zellen verlinken muss, dürfte das eigentlich gar nicht so schwer sein. Vor allem da auch die Zeilen konstant sind, weil es nur in die horizontale erweitert wird.
Mein Pseudocode würde also lauten:
Sheets("Zubehör").[Spalte, die neu geschaffen wurde &Zeile(?? z.B. 2)].Formula = "='Hauptblatt'![Spalte, die neu geschaffen wurde &Zeile(Zielzeile)]"
Alternativ habe ich mir das mit Cells vorgestellt:
Sheets("Zubehör").Cells(2,Columns(spaltenIndex)).Formula = "='Hauptblatt'!Cells(Zielzeile, Columns(spaltenIndexHauptblatt)"
Aus dem existierenden Programm habe ich den Spaltenindex ermittelt, in der das neue Produkt eingefügt wurde. Mein Ansatz wäre damit zu arbeiten. Es gibt ja Bezüge, wie z.B. Columns(spaltenIndex). Leider funktioniert mein Ansatz nicht. Weiß jemand einen Ansatz?