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

Private Sub Worksheet_Change(ByVal Target As Range

Forumthread: Private Sub Worksheet_Change(ByVal Target As Range

Private Sub Worksheet_Change(ByVal Target As Range
18.12.2017 16:23:47
Edwin
Hallo,
ich habe vermutlich ein ganz kleines Problem.
Sobald sich in den Feldern A9:D11 etwas ändert, soll eine ganze Latte an Aktionen ausgeführt werden. Das funktioniert soweit super und die Bearbeitungszeit ist soweit ok, wenn ich nur ein Feld ändere, denn dann wird mein Befehl "AktionAusführen" nur einmal ausgeführt
Aber manchmal ändere ich durch einen Makro 5 Felder aus A9:D11 gleichzeitig und somit wird der Befehl "AktionAusführen" 5x ausgeführt. Einmal würde aber reichen. Das kostet unnötig Rechenzeit.
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [A9:D11]) Is Nothing Then
AktionAusführen
End If
End Sub
Habt ihr mir ein kleines Anschuckerle, wie ich dieses Problem umgehen kann?
LG
Edwin
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Private Sub Worksheet_Change(ByVal Target As Range
18.12.2017 16:31:19
UweD
Hallo
was geschiebt denn bei AktionAusführen?
Werden da auch Zelländerungen durchgeführt?
- -
ggf events vorher ausschalten
und später wieder an

Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fehler
If Not Intersect(Target, [A9:D11]) Is Nothing Then
Application.EnableEvents = False
AktionAusführen
End If
'*** Fehlerbehandlung
Err.Clear
On Error GoTo Fehler
Fehler:
Application.EnableEvents = True
If Err.Number  0 Then MsgBox "Fehler: " & _
Err.Number & vbLf & Err.Description: Err.Clear
End Sub

LG Uwe
Anzeige
AW: Private Sub Worksheet_Change(ByVal Target As Range
18.12.2017 16:55:45
Edwin
Hallo Uwe,
ja, es werden Zelländerungen durchgeführt.
Deinen Code kann ich heute leider nicht mehr ausprobieren. Ich gebe aber sofort Bescheid, wenn ich ein Ergebnis habe.
LG
Edwin
AW: Private Sub Worksheet_Change(ByVal Target As Range
18.12.2017 17:26:54
Hajo_Zi
Hallo Edwin,
warum Offen? Soll jemand vorbei kommen beim testen Helfen?

Ich gebe keinen Dank für eine Rückmeldung, da ich durch solche Beiträge nicht meine Beitragszahl erhöhen muss.
Also ich schreibe keine Beiträge mit dem Betreff "Gerne u. Danke für die Rückmeldung. o.w.T."
Rückmeldung ist ja in der Heutigen Zeit nicht üblich und die wenigen die eine Rückmeldung geben,
mögen mir das verzeihen, das kein Danke für eine Rückmeldung kommt.
Beiträge von Werner, Luc, robert und folgende lese ich nicht.
Anzeige
AW: Private Sub Worksheet_Change(ByVal Target As Range
18.12.2017 18:45:59
Edwin
Hallo Uwe und Günther,
vielen Dank für Eure Hilfe.
Ihr habt mir damit sehr geholfen.
LG
Edwin
Prima! Danke für die Rückmeldung. owT
19.12.2017 08:10:28
UweD
AW: Private Sub Worksheet_Change(ByVal Target As Range
18.12.2017 16:32:35
guenni
Du brauchst

application.enableevents =false  ' am Anfang und
application.enableevents=true 'am Ende des Change-Ereignisses
Gruß,
Günther
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Automatisierung mit Private Sub Worksheet_Change in Excel VBA


Schritt-für-Schritt-Anleitung

Um die Automatisierung in Excel mit Private Sub Worksheet_Change(ByVal Target As Range) zu implementieren, folge diesen Schritten:

  1. Öffne Excel und lade die Datei, in der du den VBA-Code anwenden möchtest.

  2. Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Wähle im Projektfenster das entsprechende Arbeitsblatt aus.

  4. Füge den folgenden Code in das Codefenster ein:

    Private Sub Worksheet_Change(ByVal Target As Range)
       If Not Intersect(Target, [A9:D11]) Is Nothing Then
           Application.EnableEvents = False
           AktionAusführen
           Application.EnableEvents = True
       End If
    End Sub
  5. Schließe den VBA-Editor und teste die Änderungen auf dem Arbeitsblatt.

Dieser Code sorgt dafür, dass die AktionAusführen-Routine nur einmal ausgeführt wird, selbst wenn mehrere Zellen innerhalb des Bereichs A9:D11 gleichzeitig geändert werden.


Häufige Fehler und Lösungen

Fehler: Worksheet_Change wird mehrmals ausgelöst
Wenn du mehrere Zellen gleichzeitig änderst und der Code mehrmals ausgeführt wird, stelle sicher, dass Application.EnableEvents deaktiviert ist, bevor du die Aktion ausführst.

Fehler: AktionAusführen führt zu weiteren Zelländerungen
Wenn dein AktionAusführen-Befehl selbst Zelländerungen vornimmt, kann dies zu einem endlosen Schleifen führen. Stelle sicher, dass du Application.EnableEvents sowohl am Anfang als auch am Ende des Ereignisses verwendest.


Alternative Methoden

Eine andere Möglichkeit, um auf Zelländerungen zu reagieren, ist die Verwendung von Private Sub Worksheet_SelectionChange(ByVal Target As Range). Diese Methode wird ausgelöst, wenn sich die Auswahl im Arbeitsblatt ändert, und könnte in bestimmten Szenarien nützlich sein.

Beispiel:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect(Target, [A9:D11]) Is Nothing Then
        ' Aktion durchführen, wenn Zellen ausgewählt werden
    End If
End Sub

Praktische Beispiele

Hier ist ein praktisches Beispiel, wie du Private Sub Worksheet_Change verwenden kannst, um bestimmte Aktionen auszuführen:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, [A9:D11]) Is Nothing Then
        Application.EnableEvents = False
        ' Beispielaktion: Hintergrundfarbe ändern
        Target.Interior.Color = RGB(255, 255, 0) ' Gelb
        Application.EnableEvents = True
    End If
End Sub

Mit diesem Code wird die Hintergrundfarbe der Zellen in A9:D11 auf Gelb geändert, wenn eine Änderung vorgenommen wird.


Tipps für Profis

  • Verwende On Error GoTo, um eine effektive Fehlerbehandlung einzuführen. Dies hilft, das Skript stabiler zu machen.
  • Dokumentiere deinen Code gut, damit andere (oder du selbst in der Zukunft) leicht verstehen, was der Code bewirken soll.
  • Teste den Code gründlich, insbesondere bei komplexen Arbeitsblättern mit vielen Abhängigkeiten.

FAQ: Häufige Fragen

1. Was bedeutet ByVal Target As Range?
ByVal Target As Range definiert die Zellen, die geändert wurden. Der Target-Parameter enthält Informationen über die spezifischen Zellen, die das Worksheet_Change-Ereignis ausgelöst haben.

2. Warum ist es wichtig, Application.EnableEvents zu verwenden?
Die Verwendung von Application.EnableEvents verhindert, dass das Worksheet_Change-Ereignis erneut ausgelöst wird, wenn innerhalb der AktionAusführen-Routine weitere Zelländerungen vorgenommen werden. Dies hilft, endlose Schleifen zu vermeiden und die Leistung zu optimieren.

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