PDA

Vollständige Version anzeigen : Gültigkeit / Event Worksheet_Change


hQuadrat
14.11.2008, 10:27
Hallo,

ich habe ein etwas komplizierteres Problem bei dem ich momentan einfach nicht weiterkomme - vielleicht hat ja jemand von Euch eine zündende Idee hierzu...?

Situation: Ich habe eine Tabelle, auf der bestimmte Zeilen via VBA angezeigt oder ausgeblendet werden. (Es ist eine Art "projektspezifischer Fragebogen".)
In einem weiteren Tabellenblatt werden verschiedene Kriterien definiert, aufgrund deren entschieden wird ob die jeweilige Zeile angezeigt werden soll oder nicht. In einer Matrix werden dann die "Eigenschaften" der einzelnen Fragebogen-Zeilen definiert. Basierend auf den Angaben des Bearbeiters in einer VBA-Userform entscheidet das VBA-Programm dann ob eine Zeile ausgeblendet wird oder nicht. Soweit so gut, es funktioniert.

Problem: Eines dieser "Entscheidungskriterien" ist ein Zahlenwert, welcher (maximal) sechs verschiedene Werte annehmen können soll. In der "Konfigurationsmatrix" werden die entsprechenden Zellenwerte deshalb durch eine Gültigkeitsregel eingeschränkt. Soweit auch erstmal alles OK.
Nun ist es aber durchaus denkbar, dass sich diese 6 Zahlenwerte früher oder später ändern werden... Die Konsequenz hieraus wäre zunächst natürlich, die Referenzfelder der Gültigkeitsregel den neuen Werten anzupassen. Die "alten" Werte in der Konfigurationsmatrix bleiben dabei aber ungeachtet der neuen Gültigkeitsregel bestehen - und so würde natürlich auch die komplette Berechnung des VBA-Programms nicht mehr stimmen. Mit anderen Worten: man wäre gezwungen, die komplette Konfigurationsmatrix (und diese ist schon sehr umfangreich!) auf Basis der neuen Werte neu zu erstellen.

Ich suche also nach einem Weg, die alten Werte in der Konfigurationsmatrix in die Neuen umzuschreiben. Wenn ich also als Referenzwert (Gültigkeit) die Zahl 100 habe und diese meinetwegen auf 200 ändere, dann sollten sämtliche Zellen der Konfigurationsmatrix mit dem Wert 100 den neuen Wert 200 erhalten.

Ursprüngliche Idee war, dass die Konfigurationsmatrix "beim Ändern" der Gültigkeits-Referenzzelle aktualisiert wird (VBA-Such-Ersetzen-Funktion). Dies wäre ggf. denkbar über das VBA-Ereignis Worksheet_Change. Es scheitert dann aber vermutlich daran, dass um ein Vergleichswert fehlt, um die zu ersetzenden Werte zu ermitteln. (Sobald das Ereignis eintritt, ist der alte Wert ja bereits überschrieben! Oder nicht?) Diese Methode scheitert insofern also aus.

Hat vielleicht jemand von Euch eine Idee, wie ich dies lösen könnte? (Ggf. auch über eine Userform...?)
Zusätzliche Hilfszellen in der "Konfigurationstabelle" möchte ich eigentlich möglichst vermeiden, da die Zeilen und Spalten teils hardcodiert angesprochen werden, teils flexibel über eine Suchfunktion (also ein insgesamt relativ komplexes Konstrukt ;) )

Grüße,

IngGi
14.11.2008, 11:25
Hallo hQuadrat,

wenn du das Makro über das Worksheet_Change-Ereignis auslösen lässt, ist der alte Wert in der Referenzzelle natürlich weg. Ich würde daher schon früher ansetzen und bereits die Änderung der Referenzzelle über VBA erledigen. Dann ließe sich der alte Wert in eine Variable retten. Eine Änderung der Referenzzelle von Hand muss dann durch einen Blattschutz verhindert werden.

Gruß Ingolf

hQuadrat
14.11.2008, 14:36
Hallo Ingolf,
nur wo setze ich hierbei an? In diesem Falle denke ich gerade an sechs Textfelder in einer Userform - vielleicht würde es damit funktionieren? Bevor man den Wert in die Zellen schreibt, müsste man deren Wert in eine Variable packen und dann in der Konfigurationstabelle die alten Werte durch die neuen ersetzen. Könnte funktionieren... ja. Ich habe an der Sache noch ein wenig weiter herumgefeilt und überlege mir gerade eine Lösung über ein Listenfeld, dessen Werte man dann ggf. sortieren könnte und insgesamt ein wenig komfortabler wäre. Allerdings wäre der Aufwand hierzu relativ groß im Vergleich - am intuitivsten wäre die Lösung, die neuen Werte eben einfach nur in die entsprechende Zellen eintragen zu können.

Gibt es ansonsten vielleicht ein Ereignis, welches durch das bloße Markieren einer der Zellen ausgelöst würde (dass also der Zellenwert beim Markieren in eine Variable gesteckt würde)? Habe leider in meinem großen VBA-Buch nichts hierzu gefunden...

IngGi
14.11.2008, 14:47
Hallo hQuadrat,

denkbar wäre da zum Beispiel, dass du dir eine Kopie des kompletten Tabellenblattes mit den Referenzzellen machst. Wenn du dann im Original eine Referenzzelle änderst, hast du den alten Wert noch in der Kopie. In das Worksheet_Change-Makro müsstest du dann am Ende noch einen Schritt mit einbauen, der die Änderung des Originales in die Kopie überträgt. Die Kopie des Tabellenblattes wird ausgeblendet (am Besten auf xlVeryHidden setzen, damit man das Tabellenblatt nicht von Hand wieder einblenden kann).

Gruß Ingolf

hQuadrat
14.11.2008, 15:44
Hallo nochmals ;)
ich werde dies am Montag (auf die Datei kann ich nur bei der Arbeit zugreifen) nochmals ein wenig genauer anschauen - wäre natürlich auch eine Alternative zur Userform. Eine komplette Kopie der Konfigurationstabelle (im Übrigen auch komplett ausgeblendet für den "User") wäre aber zuviel des Guten. Ich bin mal gespannt, wie sich ein komplettes Tabellenblatt mit 6 befüllten Zellen auf die Dateigröße auswirken wird.
Erstmal danke für die Tipps. Ich melde mich zurück ;)

Ein schönes Wochenende wünscht,