Excel Makro ausführen bei Änderung in einer Zelle in anderem Tabellenblatt?
Hallo zusammen,
ich habe ein Problem mit Excel, das vermutlich ganz leicht zu lösen ist, alleine komme ich aber nicht weiter.
Ich möchte gerne ein Makro immer bei einer Änderung in einer bestimmten Zelle ausführen lassen. Dazu habe ich bisher folgenden Code:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range) Set Target = Intersect(Target, Range("A1")) If Target Is Nothing Then Exit Sub Else FooterLeft End If End Sub
Der funktioniert auch, bloß soll jetzt die aktivierende Zelle nicht A1 auf diesem Tabellenblatt sondern beispielsweise Zelle A6 auf dem Tabellenblatt "Deckblatt" sein.
Was muss ich hier wie umformulieren damit das klappt, oder brauche ich grundsätzlich eine ganz andere Funktion dazu?
Vielen lieben Dank!
2 Antworten
Es funktioniert, ja, auch wenn etwas umständlich. Generell würde ich es vermeiden Übergabeparameter wie target zu verändern, selbst wenn sie by value übergeben werden. Aber gut.
Zelle A6 vom Tabellenblatt "Deckblatt" referenzierst du mit "Worksheets("Deckblatt").Range("A6")".
Das macht aber in deinem Fall keinen Sinn, da du dich in einem Worksheet-Ereignis befindest. Das bedeutet, das Ereignis wird nur bei Änderungen im selben Sheet, in das der Code gelegt wurde, ausgelöst.
Was bedeutet das für dich?
Du musst dein Ereignis am Tabellenblatt "Deckblatt" auslösen. FooterLeft müsstest du allen Tabellenblättern zugänglich machen können, indem du die Prozedur in ein Modul der Arbeitsmappe packst.
Meines Erachtens reicht es, wenn du das Change-Ereignis nur auf dem Deckblatt abfängst. Weil wenn dort etwas geändert wird, soll etwas passieren.
Wenn beim Ändern auf anderen Tabellenblättern auch etwas passieren soll in Abhängigkeit vom Deckblatt, kannst du probieren, auf den anderen Tabellenblättern in einer Hilfszelle =Deckblatt!A6 zu schreiben.
Ich bin mir gerade nicht sicher, ob eine indirekte Änderung auch das Change-Event auslöst.
Danke für die erneute Antwort und sorry, dass ich mich erst jetzt wieder melde, war die letzten Tage unterwegs. Leider funktioniert das mit der indirekten Änderung in der Zelle mit Verweis nicht. Die Idee hatte ich auch zuerst und habe es so probiert, allerdings ändert sich ja der Wert der Zelle nicht, deshalb wird es auch nicht als Change erkannt. Trotzdem danke, ich probiere die Tage mal weiter wenn ich Zeit finde.
Danke für die Antwort.
Das Makro selbst liegt in einem Modul, ist also für alle Tabellenblätter zugänglich. Allerdings soll die Ausführung zwar durch eine Zelle auf dem "Deckblatt" ausgelöst werden, allerdings soll das Makro auf "Deckblatt" nicht ausgeführt werden sondern nur auf allen anderen Tabellenblättern.
Wenn nicht über das Worksheet-Ereignis, wie würde ich das dann anstellen?
Die Prozedur heißt doch "WorkSheet_Change". Das heißt, man kann es nur pro Worksheet definieren und nicht worksheetübergreifend.
Ich habe gerade kein VBA zur Hand, aber ich bin mir sicher, dass es kein entsprechendes Arbeitsmappenereignis (Workbook_Change) gibt.
In einem Tabellenblatt ändert sich etwas, dann wird genau in diesem Tabellenblatt das Ereignis ausgelöst.
Formalantwort, der Frager sollte Dir nach dem qualifizierten Eingehen auf die Rückfrage ruhig eine "Hilfreichste" zukommen lassen können und zukommen lassen!
PS: Es geht im Endeffekt darum, dass auf "Deckblatt" in einer Zelle ein bestimmter Text, in einer anderen ein Datum eingetragen wird. Diese sollen dann auf allen weiteren Tabellenblättern in der Fußzeile erscheinen und sich automatisch ändern wenn der Eintrag in "Deckblatt" geändert wird.
Vielleicht gibt es hierfür ja auch eine viel einfachere Herangehensweise. Auch dafür bin ich gerne offen.