Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Makro nach Aktualisierung einer Zelle ausführen

Makro nach Aktualisierung einer Zelle ausführen
25.04.2008 09:27:00
Robin
Moin Cracks,
gibt es eine Möglichkeit, ein Makro automatisch auszuführen, wenn sich der Wert einer Zelle ändert? Ich tippe also was ein, drücke Enter zum Bestätigen und das Makro soll rennen. Am Besten natürlich nur, wenn der Inhalt sich auch wirklich geändert hat.
Vielen Dank für alle Tipps!
Gruß
Robin

Anzeige

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro nach Aktualisierung einer Zelle ausführe
25.04.2008 09:46:00
Renee
Hi Robin,
So (code gehört in die Tabelle, Zelle die geprüft wird ist hier A1):

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address  "$A$1" Then Exit Sub
Application.EnableEvents = False
MeinRennMakro
Application.EnableEvents = True
End Sub


GreetZ Renée

Anzeige
AW: Makro nach Aktualisierung einer Zelle ausführe
25.04.2008 10:34:00
severin
Funktioniert leider nicht. Ich möchte, dass das Makro tabellenblatt_benennen automatisch nach verlassen von Zelle A1 (wo zwingend ein Eintrag gemacht werden muss) aktiviert wird.

Sub tabellenblatt_benennen()
ActiveSheet.Name = [A1]
End Sub


Anzeige
AW: Makro nach Aktualisierung einer Zelle ausführe
25.04.2008 10:42:29
Renee
Hi Severin,
Der Code gehört in das Tabellenblatt, auf dem du den Tabellenblattname automatisch an den Inhalt der Zelle A1 (wenn diese geändert wird!) angepasst wird:

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Address = "$A$1" Then Me.Name = Target.Value
On Error GoTo 0
End Sub


GreetZ Renée

Anzeige
AW: Makro nach Aktualisierung einer Zelle ausführe
25.04.2008 11:06:55
severin
Sorry, ich bin blutiger Anfänger. Wenn ich dieses Makro in mein Tabellenblatt (mit Alt + F11) eingebe erscheint es gar nicht in der Makroauflistung. Wo muss denn welcher Code (Step by Step) eingegeben werden? Die Grundaufgabe ist: In Zelle A1 möchte ich eine Eingabe (Zahl, Datum oder Text) erfassen. Diese wird beim Verlassen (mit Enter, Tab oder Maus) der Zelle automatisch in den Tabellenblattname geschrieben d.h. der Tabellenblattname wird umbenannt. Ich hoffe, ich nerve nicht ;-)

Anzeige
AW: Makro nach Aktualisierung einer Zelle ausführe
25.04.2008 11:26:12
Renee
Hi Severin,
Wenn du alles machst wie vorgeschlagen, musst du das Makro nicht aufrufen und du siehst es auch nicht in der Makroliste, weil das eine Event (Vorgangs) gesteuerte Prozedur ist!
Es passiert alles automatisch, sobald du den Inhalt in der Zelle A1 des Tabellenblatts mit dem Makro veränderst!
GreetZ Renée

Anzeige
AW: Makro nach Aktualisierung einer Zelle ausführe
25.04.2008 11:42:00
Robin
Hey Renee, vielen Dank!
Der Code funktioniert wunderbar! Aber die Kür: Kann ich überprüfen, ob der Inhalt der Zelle verändert wurde? Ansonsten auch nicht tragisch, das wäre nur für die Schnelligkeit.
Viele Grüße
Robin

AW: Makro nach Aktualisierung einer Zelle ausführe
25.04.2008 11:44:00
Robin
Ah, da fällt mir noch ein:
Target.Address "$A$1"
Da wird die Markierung mit einer Zelle verglichen. Wie kann ich denn überprüfen, ob die markierung innerhalb einer Range ist?

Anzeige
AW: Makro nach Aktualisierung einer Zelle ausführe
25.04.2008 11:56:00
Renee
Hi Robin,
Statt nur eine Zelle, ein ganzer Bereich:

IF Intersect(target, Me.Range("A1:A10")) is nothing Then Exit Sub
 ....sonst mache hier was du willst


GreetZ Renée

AW: Makro nach Aktualisierung einer Zelle ausführe
25.04.2008 12:49:52
Robin
Wow, supi! Die Intersect-Methode kannte ich noch nicht. Sag mal, wo erfahre ich denn eigentlich, welche Prozedur bei welchem Event aufgerufen wird? Weiß garnicht, wo ich da suchen soll. Es gibt doch bestimmt auch eine Prozedur, die beim Öffnen des Blattes ausgeführt wird, oder?

Anzeige
AW: Makro nach Aktualisierung einer Zelle ausführe
25.04.2008 13:02:45
Renee
Hi Robin,
Das erfährst du am schnellsten im VB-Editor:
Userbild
1. Tabelle oder DieseArbeitsmappe auswhählen.
2. Dropdown ebenfalls
3. Dropdown zeigt mögliche Events, Name sagt eigentlich wann, aber es gibt auch im VB eine Hilfe!
Greetz Renée

Anzeige
AW: Makro nach Aktualisierung einer Zelle ausführe
25.04.2008 12:59:00
Robin
Okok, wer lesen kann ist klar im Vorteil. Habs gefunden in der Hilfe. Sorry.

AW: Makro nach Aktualisierung einer Zelle ausführe
28.04.2008 10:20:00
Robin
Hallo nochmal, ich hab immernoch eine Frage.
Und zwar versuche ich, die Adresse der veränderten Zelle an eine Prozedur zu übergeben, wofür ich aber anscheinend zu doof bin. Der Code:

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Me.Range("A" & ErstSchraubZeile, "C" & LetzteSchraubZeile)) Is Nothing  _
Then Exit Sub
Application.EnableEvents = False
Call alle_tabellen_ändern(Target)
Application.EnableEvents = True
End Sub


Sub alle_tabellen_ändern(Zelle As Range)
Dim i As Integer
For i = 1 To AnzAuto
Sheets(i).Zelle.Value = Sheets("Referenz").Zelle.Value
Next i
End Sub


Die Fehlermeldung kommt in dieser Zeile:
Sheets(i).Zelle.Value = Sheets("Referenz").Zelle.Value
Und heißt: Objekt unterstützt diese Eigenschaft oder Methode nicht.
Vielen Dank für eure Hilfe!
Robin

Anzeige
AW: Makro nach Aktualisierung einer Zelle ausführe
01.05.2008 15:12:00
Gerd
Hi Robin,
ThisWorkbook.Sheets(i).Range(Zelle.Address).Value = Zelle.Value
Gruß Gerd
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Makro automatisch bei Zelländerung ausführen


Schritt-für-Schritt-Anleitung

Um ein Makro in Excel automatisch auszuführen, wenn sich der Wert einer Zelle ändert, kannst Du den folgenden VBA-Code verwenden. Dieser Code gehört in das Tabellenblatt, auf dem die Zelle überwacht werden soll (z.B. A1):

  1. Öffne Excel und drücke Alt + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.
  2. Wähle das entsprechende Tabellenblatt im Projektfenster aus.
  3. Füge den folgenden Code in das Codefenster ein:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address <> "$A$1" Then Exit Sub
    Application.EnableEvents = False
    Call MeinRennMakro
    Application.EnableEvents = True
End Sub
  1. Ersetze MeinRennMakro durch den Namen Deines Makros, das Du ausführen möchtest.

Mit diesem Setup wird das Makro automatisch ausgeführt, wenn Du die Zelle A1 änderst.


Häufige Fehler und Lösungen

Fehler: Das Makro wird nicht ausgeführt.
Lösung: Stelle sicher, dass Du den Code im richtigen Tabellenblatt eingefügt hast und dass der Code den richtigen Zellbereich überwacht. Achte darauf, dass Application.EnableEvents auf False gesetzt wird, um rekursive Aufrufe zu vermeiden.

Fehler: Das Makro ist nicht in der Makroliste sichtbar.
Lösung: Da es sich um ein Event-gesteuertes Makro handelt, erscheint es nicht in der Liste der Makros. Es wird automatisch ausgeführt, sobald die Zelle geändert wird.


Alternative Methoden

Eine alternative Methode zur Überprüfung mehrerer Zellen ist die Verwendung der Intersect-Methode. Damit kannst Du einen Bereich definieren, in dem die Zelländerungen überwacht werden:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Me.Range("A1:A10")) Is Nothing Then Exit Sub
    Application.EnableEvents = False
    Call MeinRennMakro
    Application.EnableEvents = True
End Sub

Diese Methode ist besonders nützlich, wenn Du mehrere Zellen überwachen möchtest.


Praktische Beispiele

Hier sind einige praktische Beispiele, wie Du ein Excel-Makro aktualisieren kannst:

  1. Tabelle umbenennen: Wenn Du den Wert in Zelle A1 änderst und das Tabellenblatt automatisch umbenennen möchtest:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$A$1" Then
        On Error Resume Next
        Me.Name = Target.Value
        On Error GoTo 0
    End If
End Sub
  1. Zellenwerte kopieren: Um den Wert einer Zelle in andere Tabellen zu kopieren, kannst Du folgenden Code verwenden:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Me.Range("A1:A10")) Is Nothing Then Exit Sub
    Application.EnableEvents = False
    Call alle_tabellen_ändern(Target)
    Application.EnableEvents = True
End Sub

Sub alle_tabellen_ändern(Zelle As Range)
    Dim i As Integer
    For i = 1 To ThisWorkbook.Sheets.Count
        ThisWorkbook.Sheets(i).Range(Zelle.Address).Value = Zelle.Value
    Next i
End Sub

Tipps für Profis

  • Verwende Application.EnableEvents: Nutze diese Anweisung, um zu verhindern, dass das Makro rekursiv aufgerufen wird, wenn Du in der Worksheet_Change-Prozedur Änderungen vornimmst.
  • Fehlerbehandlung: Implementiere On Error Resume Next und On Error GoTo 0, um Fehler zu vermeiden, die auftreten können, wenn ein Tabellenblattname ungültig ist.
  • Dokumentation: Dokumentiere Deinen Code gut, damit Du und andere Anwender verstehen, was jede Funktion tut und warum.

FAQ: Häufige Fragen

1. Wie kann ich überprüfen, ob der Inhalt der Zelle verändert wurde?
Du kannst den vorherigen Wert der Zelle speichern und mit dem neuen Wert vergleichen, bevor Du das Makro ausführst.

2. Welche Excel-Version benötige ich für VBA?
VBA ist in den meisten Excel-Versionen ab Excel 97 verfügbar. Achte darauf, dass Du die Makros aktivierst, um sie verwenden zu können.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige