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

ereignisabhängige Prozedur

Forumthread: ereignisabhängige Prozedur

ereignisabhängige Prozedur
14.10.2016 08:57:11
Klaus
Hallo,
ich habe folgende Frage: Ich habe erste Versuche mit ereignisabhängigen Prozeduren gemacht, und zwar als erstes mit "worksheet_change()". Dabei geht es ja darum, dass eine Prozedur dann automatisch gestartet werden soll, wenn in einem bestimmten Zellbereich eine Veränderung des Inhalts durchgeführt wird. Leider findet sich zu diesem Befehl keinerlei Hilfe in der VBA/Excel-Hilfe.
Als erstes ist mir die Syntax nicht klar, wie der Parameter (nämlich der Zellbereich, auf den sich das Ereignis beziehen soll) übergeben werden soll.
Mein erster Versuch war

Private Sub Worksheet_Change(A1)
End Sub

wobei A1 die Zelle sein sollte, deren Veränderung die Prozedur auslösen sollte.
Daraufhin (d.h., sobald ich in irgendeiner Zelle des Tabellenblatts eine Veränderung vornehme) meldet das Programm: "Fehler beim Kompilieren: Deklaration der Prozedur entspricht nicht der Beschreibung eines Ereignisses oder einer Prozedur mit demselben Namen".
Was mich weiterhin verwirrt: Die Prozedur (bzw. der Versuch der Kompilierung) springt an, egal in welcher Zelle ich eine Veränderung vornehme, der Parameter "A1" hat also keine Auswirkung.
Hat jemand eine Idee, woran das alles liegen könnte?
Wieder mal vielen Dank im voraus für alle sachdienlichen Hinweise,
Klaus
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ereignisabhängige Prozedur
14.10.2016 09:31:37
baschti007
Hey Klaus so müsstest du das dann machen =)
Gruß Basti

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("A1").Address Then
MsgBox "A1 hat sich geändert"
End If
End Sub

AW: ereignisabhängige Prozedur
14.10.2016 11:03:55
Klaus
Hallo, Basti,
vielen Dank - so klappt's!
Grüße,
Klaus
Anzeige
AW: ereignisabhängige Prozedur
14.10.2016 09:32:39
Nepumuk
Hallo,
wähle in der linken Combobox über dem Codefenster das Objekt Worksheet aus. Dann kannst du in der rechten Combobox das Ereignis Change auswählen. So hast du die korrekte Syntax für das Ereignis. Um auf die Änderung der Zelle A1 zu reagieren gehst du wie folgt vor:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$A$1" Then MsgBox "Hallo"
End Sub

Gruß
Nepumuk
Anzeige
AW: ereignisabhängige Prozedur
14.10.2016 09:37:42
KlausF
Hallo Klaus,
die erste Zeile darfst Du bei den Event-Makros nie verändern.
Du kannst entweder den Bereich explizit angeben
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address = "$A$1" Then
     'Hier steht das was passieren soll
  End If
End Sub
oder Du lässt das Event-Makro gar nicht erst starten wenn andere
Zellen ausgewählt sind:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address  "$A$1" Then Exit Sub
     'Hier steht das was passieren soll
End Sub
Gruß
auch Klaus
Anzeige
AW: ereignisabhängige Prozedur
14.10.2016 11:08:23
Klaus
Hallo, Klaus und Nepomuk,
auch euch vielen Dank für den prompten Rat, hat mir sehr geholfen. Bin immer wieder begeistert hier ...
Klaus
;
Anzeige

Infobox / Tutorial

Ereignisabhängige Prozeduren in Excel VBA richtig nutzen


Schritt-für-Schritt-Anleitung

Um eine ereignisabhängige Prozedur in Excel VBA zu erstellen, befolge diese Schritte:

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.
  2. Wähle das richtige Arbeitsblatt:

    • Im Projekt-Explorer (linke Seite) wähle das Arbeitsblatt, für das du die Prozedur erstellen möchtest.
  3. Füge den Code ein:

    • In das Codefenster des Arbeitsblatts füge den folgenden Code ein:
      Private Sub Worksheet_Change(ByVal Target As Range)
      If Target.Address = "$A$1" Then
         MsgBox "A1 hat sich geändert"
      End If
      End Sub
  4. Testen:

    • Ändere den Inhalt der Zelle A1 und achte darauf, dass die Nachricht erscheint.

Häufige Fehler und Lösungen

  • Fehler: "Deklaration der Prozedur entspricht nicht der Beschreibung eines Ereignisses oder einer Prozedur mit demselben Namen".

    • Lösung: Stelle sicher, dass die erste Zeile der Prozedur nicht verändert wird. Die Syntax muss korrekt sein, wie im Beispiel oben gezeigt.
  • Fehler: Prozedur wird auch bei Änderungen in anderen Zellen aktiviert.

    • Lösung: Verwende eine If-Bedingung, um nur auf spezifische Zellen zu reagieren, wie im obigen Beispiel.

Alternative Methoden

Wenn du nicht nur auf eine bestimmte Zelle reagieren möchtest, sondern auf mehrere Zellen oder Bereiche, kannst du den Code erweitern:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Me.Range("A1:B10")) Is Nothing Then
        MsgBox "Ein Wert im Bereich A1:B10 wurde geändert"
    End If
End Sub

Dies ermöglicht dir, mehrere Zellen zu überwachen.


Praktische Beispiele

Hier sind einige praktische Anwendungsbeispiele für ereignisabhängige Prozeduren:

  1. Benachrichtigung bei Zellenänderung:

    Private Sub Worksheet_Change(ByVal Target As Range)
       If Target.Address = "$A$1" Then
           MsgBox "Die Zelle A1 wurde geändert"
       End If
    End Sub
  2. Verhindern von Änderungen in bestimmten Zellen:

    Private Sub Worksheet_Change(ByVal Target As Range)
       If Not Intersect(Target, Me.Range("B1:B10")) Is Nothing Then
           Application.EnableEvents = False
           MsgBox "Änderungen in B1:B10 sind nicht erlaubt!"
           Application.Undo
           Application.EnableEvents = True
       End If
    End Sub

Tipps für Profis

  • Verwendung von Intersect: Diese Methode hilft, mehrere Zellen zu überwachen und spezifische Aktionen durchzuführen.
  • Verwende Application.EnableEvents = False: Dies verhindert, dass andere Prozeduren während einer Änderung ausgelöst werden, was zu unerwarteten Fehlern führen kann.
  • Debugging: Nutze Debug.Print im Code, um Werte zu überprüfen, wenn du die Prozedur testest.

FAQ: Häufige Fragen

1. Kann ich mehrere Zellen gleichzeitig überwachen?
Ja, du kannst den Intersect-Befehl verwenden, um mehrere Zellen oder Bereiche zu überwachen.

2. Was muss ich tun, wenn ich eine Fehlermeldung erhalte?
Überprüfe die Syntax deiner Prozedur und stelle sicher, dass die erste Zeile nicht verändert wurde. Achte auch darauf, dass der Code im richtigen Arbeitsblatt eingegeben wurde.

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