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

Forumthread: mehrere Private Sub Worksheet_Change

mehrere Private Sub Worksheet_Change
05.10.2016 13:15:39
Christof
Hallo zusammen,
wieder einmal stehe ich mir selbst im Weg.
Ich habe folgende Routine im Auge:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer
For i = 18 To 77
If Cells(7, i).Value  0 Then Range("G18").Value = Range("D18").Value + 1
Next
End Sub

nun möchte ich in der selben Arbeitsmappe folgenden Bereich betrachten
If Cells(10, i).Value 0 Then Range("J18").Value = Range("I18").Value + 1
wie kann ich dieses Problem lösen?
Gruß
Christof
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: mehrere Private Sub Worksheet_Change
05.10.2016 13:45:17
EtoPHG
Hallo Christof,
Nicht du stehst dir im Weg, sondern dein Verständnis für das _Change Ereignis fehlt!
Du legst erst mal fest, in welchem Bereich Änderungen durch die manuelle Änderungen von Zellinhalten deine Manipulationen an anderen Zellinhalten auslösen sollen.
Dann musst du prüfen, ob dieser Bereich von ausgelösten Zelländerungen betroffen ist.
Wenn ja, schaltest du die Ereignissteuerung aus, führst deine Manipulation durch und schaltest sie wieder ein. Das könnte dann z.B. so aussehen:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
'   Prüfbereiche festlegen
Dim rC As Range
Dim Bereich1 As Range
Dim Bereich2 As Range
'   Prüfen ob Veränderungen in den Bereichen
Set Bereich1 = Intersect(Target, Range(Cells(7, 18), Cells(7, 77)))
Set Bereich2 = Intersect(Target, Range(Cells(10, 18), Cells(10, 77)))
' Event-Steuerung aus
Application.EnableEvents = False
If Not Bereich1 Is Nothing Then
'       Für alle Zellen im geänderten Bereich1
For Each rC In Bereich1
If rC  0 Then Range("G18").Value = Range("D18").Value + 1
Next rC
End If
If Not Bereich2 Is Nothing Then
'       Für alle Zellen im geänderten Bereich2
For Each rC In Bereich2
If rC  0 Then Range("J18").Value = Range("I18").Value + 1
Next rC
End If
' Event-Steuerung ein
Application.EnableEvents = True
End Sub
Gruess Hansueli
Anzeige
AW: mehrere Private Sub Worksheet_Change
05.10.2016 14:01:54
Christof
Hallo Hansueli,
da hast Du wohl den Nagel auf den Kopf getroffen.
ich habe "gerade" erst angefangen, mich richtig und tiefer in die Weld VBA einzuarbeiten.
Bedingt durch Familie und Arbeit geht es leider meist nur "Problem basiert"..
Vielen Dank für die Hilfe und die gute Erklärung,
ich werde gleich mal tätig und werde mich ausführlich damit beschäftigen.
Werde dann Rückmeldung geben.
Gruß
Christof
Anzeige
AW: mehrere Private Sub Worksheet_Change
05.10.2016 14:38:57
Christof
Hallo Hansueli,
es scheint alles richtig zu sein,
in der ersten Spalte (G) klappt es, Werte werden in Spalte (D)
geschrieben.
Aber in der zweiten Spalte (J) klappt es nicht, hier passiert nichts.
Woran kann es liegen?
Gruß
Christof
AW: was ich zu bezweifeln wage..
05.10.2016 19:49:28
Werner
Hallo Christof,
...deine Vorgabe vom Eingangsbeitrag war so wie ihn dann Hansueli umgesetzt hat.
Die Code-Zeile
If rC  0 Then Range("G18").Value = Range("D18").Value + 1
addiert auf den Wert in D18 1 drauf und schreibt das Ergebnis dann in G18. So wie du jetzt und weiter unten schreibst willst du es aber wohl gerade umgekehrt. Dann musst du die G18 und D18 im Code tauschen.
Gruß Werner
Anzeige
AW: mehrere Private Sub Worksheet_Change
05.10.2016 14:43:48
Bianca
Hallo,
stimmt deine If Frage so?
Cells (Zeile, Spalte)...
was soll das Makro den machen?
lg Bianca
AW: mehrere Private Sub Worksheet_Change
05.10.2016 14:54:39
Christof
Hallo Bianca,
ich möchte den Wert, der in G18 ermittelt wurde, in D19 schreiben,
gleiches gilt für den Wert, der in J18 ermittelt wurde, der dann in I19 geschrieben werden soll.
Das hat den Hintergrund, das der jeweilige Wert (D19 und I19) als Ausgangswert für die nächste Berechnung zur Verfügung gestellt wird.
Das geht sicher auch über die klassische wenn-dann Methode innerhalb der Mappe, wäre aber nach einem löschen der Zellinhalte nicht mehr möglich.
Gruß
Chrstof
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Mehrere Private Sub Worksheet_Change in Excel


Schritt-für-Schritt-Anleitung

Um mehrere Private Sub Worksheet_Change-Ereignisse in einer Excel-Arbeitsmappe zu implementieren, folge diesen Schritten:

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11, um den VBA-Editor zu starten.
  2. Wähle das richtige Arbeitsblatt:

    • Im Projekt-Explorer, finde das Arbeitsblatt, in dem du die Worksheet_Change-Ereignisse implementieren möchtest.
  3. Füge den Code ein:

    • Kopiere und füge den folgenden Code ein:

      Option Explicit
      Private Sub Worksheet_Change(ByVal Target As Range)
      Dim rC As Range
      Dim Bereich1 As Range
      Dim Bereich2 As Range
      
      ' Prüfbereiche festlegen
      Set Bereich1 = Intersect(Target, Range(Cells(7, 18), Cells(7, 77)))
      Set Bereich2 = Intersect(Target, Range(Cells(10, 18), Cells(10, 77)))
      
      ' Event-Steuerung aus
      Application.EnableEvents = False
      
      ' Prüfen ob Veränderungen in Bereich 1
      If Not Bereich1 Is Nothing Then
         For Each rC In Bereich1
             If rC.Value > 0 Then Range("G18").Value = Range("D18").Value + 1
         Next rC
      End If
      
      ' Prüfen ob Veränderungen in Bereich 2
      If Not Bereich2 Is Nothing Then
         For Each rC In Bereich2
             If rC.Value > 0 Then Range("J18").Value = Range("I18").Value + 1
         Next rC
      End If
      
      ' Event-Steuerung ein
      Application.EnableEvents = True
      End Sub
  4. Testen des Codes:

    • Ändere Werte in den Zellen des definierten Bereichs, um zu überprüfen, ob die Werte in G18 und J18 korrekt aktualisiert werden.

Häufige Fehler und Lösungen

  • Fehler: Änderungen in Bereich 2 (J) werden nicht aktualisiert.

    • Lösung: Stelle sicher, dass die Bedingungen in den If-Anweisungen korrekt sind. Vermutlich möchtest du die Zellen in Bereich 2 (J) überprüfen und anpassen.
  • Fehler: Anwendung stürzt ab oder gibt Fehlermeldungen aus.

    • Lösung: Überprüfe, ob Application.EnableEvents korrekt gesetzt wird. Dies verhindert, dass der Code rekursiv ausgelöst wird.

Alternative Methoden

Falls du keine Private Sub Worksheet_Change-Ereignisse verwenden möchtest, kannst du die folgenden Alternativen in Betracht ziehen:

  • Verwendung von Formeln: Du kannst Formeln in den Zellen verwenden, um ähnliche Berechnungen durchzuführen, ohne VBA zu nutzen.

  • Makros: Erstelle ein Makro, das über eine Schaltfläche oder Shortcut ausgeführt wird, anstatt automatisch bei Änderungen zu reagieren.


Praktische Beispiele

Hier sind zwei Anwendungsbeispiele für die Worksheet_Change-Ereignisse:

  1. Automatische Berechnung:

    • Wenn du in den Zellen von Reihe 7 Werte änderst, wird automatisch der Wert in G18 um 1 erhöht, wenn die Bedingung erfüllt ist.
  2. Kopieren von Werten:

    • Ändert sich ein Wert in der Zeile 10, wird der Wert in J18 basierend auf dem Wert in I18 angepasst.

Tipps für Profis

  • Nutze die Intersect-Funktion effizient, um nur Änderungen in bestimmten Bereichen zu erkennen.

  • Schalte die Ereignissteuerung (Application.EnableEvents) immer aus, um unerwünschte Rekursionen zu vermeiden.

  • Dokumentiere deinen Code, um später nachvollziehen zu können, was jeder Teil des Codes bewirken soll.


FAQ: Häufige Fragen

1. Was ist der Zweck von Private Sub Worksheet_Change? Der Private Sub Worksheet_Change wird verwendet, um VBA-Code auszuführen, wenn sich der Inhalt einer Zelle auf einem Arbeitsblatt ändert.

2. Wie kann ich sicherstellen, dass mein Code effizient ist? Verwende Application.EnableEvents, um zu verhindern, dass der Code während seiner eigenen Ausführung erneut ausgelöst wird, und beschränke den Bereich der Zellen, die du überwachen möchtest.

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