Herbers Excel-Forum - das Archiv

Ereignismakro funktioniert nicht bei Zelländerung

Bild

Betrifft: Ereignismakro funktioniert nicht bei Zelländerung
von: Fritz
Geschrieben am: 05.10.2003 10:48:01
Hallo VBA-Experten,
ich habe in einer Mappe in mehreren Tabellen als Tabellenmodul folgendes Makro eingetragen. Danach richten sich die Tabellennamen der betroffenen Tabellen nach dem Eintrag in der Zelle A1. Soweit funktionierte das bisher auch wunderbar. Ich habe nun allerdings in diesen Tabellen in A1 eine Formel eingegeben, wonach sich der Zellinhalt nach dem Eintrag in einer Liste (also jeweils nach dem Wert in einer anderen Zelle) richtet. Ändert sich nun der Eintrag in dieser Zelle, ändert sich zwar sofort auch jeweils der Wert in Zelle A1, der Blattname aber nicht. Woran liegt das? Und weiß einer von euch wie sich das entsprechend meinen Vorstellungen ändern lässt?
Danke bereits an dieser Stelle.
Gruß
Fritz

Bild

Betrifft: AW: Ereignismakro
von: Fritz
Geschrieben am: 05.10.2003 10:52:14
Hallo miteinander,

ich habe in der Schnelle das Makro nicht mit angegeben und möchte das hier nachholen:



Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$A$1" Then Exit Sub
If Range("A1").Value <> "" Then ActiveSheet.Name = Range("A1").Value
End Sub



Gruß
Fritz
Bild

Betrifft: AW: Ereignismakro
von: Beni
Geschrieben am: 05.10.2003 11:00:28
Hallo Fritz,
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
und A1 kurz selektionieren.
Gruss Beni
Bild

Betrifft: AW: Ereignismakro
von: Fritz
Geschrieben am: 05.10.2003 12:04:10
Hallo Beni,
zunächst danke für Deine Hilfe und dafür, dass Du mir helfen willst.
Meine Kenntnisse in VBA sind so dürftig. Deshalb bitte ich, dass Du mir die Vorgehensweise noch etwas konkreter beschreiben musst.
Gruß
Fritz
Bild

Betrifft: AW: Ereignismakro
von: Matthias G
Geschrieben am: 05.10.2003 11:16:06
Hallo Fritz,
für diesen Fall brauchst du das Calculate-Ereignis:


Private Sub Worksheet_Calculate()
If Range("A1").Value <> "" Then ActiveSheet.Name = Range("A1").Value
End Sub


Gruß,
Matthias
Bild

Betrifft: AW: Ereignismakro
von: Fritz
Geschrieben am: 05.10.2003 11:59:26
Hallo Matthias,

dein Lösungsvorschlag hat bei mir nicht zu dem gewünschten Ergebnis geführt.
Ich glaube aber, dass meine Informationen unzureichend waren.

Deshalb etwas ausführlicher:
Die Tabellennamen einzelner Tabellenblätter einer Mappe enthalten jeweils in Zelle A1 einen Wert. Diese Tabelle soll genau diesen Wert als Tabellenname führen und diesen entsprechend verändern, wenn sich der Eintrag in A1 ändert. Nur dass sich eben dieser Eintrag, nicht durch eine Eingabe direkt in A1 ändert, weil eine Formel in A1 den Zellinhalt aus einer Zelle aus einem anderen Tabellenblatt ausliest.

Beispiel: A1 in einem Tabellenblatt enthält die folgende Formel: =Daten!A4). Steht aktuell im Blatt Daten in A4 der Eintrag "Müller", steht auch in A1 in dem anderen Tabellenblatt "Müller" und deshalb heißt diese Tabelle auch momentan Müller. Wird jetzt im Blatt "Daten" in A4 Müller in Maier abgeändert, ändert sich im Blatt Müller in A1 der Eintrag Müller zwar in Maier, aber der Tabellenname ändert sich nicht. Und genau das will ich eigentlich erreichen. Die bisherige Tabelle "Müller" sollte jetzt (automatisch in "Maier" umbenannt werden.

Wie kann ich das erreichen.
Nochmals vielen Dank für jeden Hinweis bzw. jede Hilfe.

Gruß
Fritz
Bild

Betrifft: AW: Ereignismakro
von: Matthias G
Geschrieben am: 05.10.2003 12:13:33
Hallo Fritz,
wenn der Bezug auch von einem anderen Blatt kommen kann, dann folgendes:


Private Sub Worksheet_Calculate()
Name = Range("A1").Value
End Sub


Die Abfrage, ob die Zelle leer ist, ist bei Bezügen nicht nötig, es sei denn du hast "Nullwerte anzeigen" deaktiviert.
Gruß,
Matthias
Bild

Betrifft: AW: Ereignismakro
von: Fritz
Geschrieben am: 05.10.2003 12:26:01
Hallo Mathias,
kurze Rückmeldung: Jetzt funktioniert die Sache, wie gewünscht.
Vielen Dank für Deine Hilfe.
Gruß
Fritz
Bild

Betrifft: AW: Danke für die Rückmeldung! - o.T.
von: Matthias G
Geschrieben am: 05.10.2003 12:30:37
-
Bild

Betrifft: AW: Ereignismakro
von: Beni
Geschrieben am: 05.10.2003 12:31:07
Hallo Fritz,
kopiere diesen Code in das Tabellenmodul von der Tabelle "Daten" und passe "Sheets(1).Name" entsprechend an, weil sich der Tabellenname ändert, muss hier die TabellenNr stehen und nicht der Tabellenname, wenn Du in Tabelle "Daten!A4" den Wert änderst, ändert sich auch der Tabellenname.
Gruss Beni



Private Sub Worksheet_Change(ByVal Target As Range)
' 05.10.2003 von Bernhard Mächler
If Target.Row = 4 And Target.Column = 1 Then
Sheets(1).Name = Range("A4")
End If
End Sub


 Bild