Microsoft Excel

Herbers Excel/VBA-Archiv

mehrere Private Sub Worksheet_Change


Betrifft: mehrere Private Sub Worksheet_Change von: Christof
Geschrieben am: 05.10.2016 13:15:39

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

  

Betrifft: AW: mehrere Private Sub Worksheet_Change von: EtoPHG
Geschrieben am: 05.10.2016 13:45:17

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


  

Betrifft: AW: mehrere Private Sub Worksheet_Change von: Christof
Geschrieben am: 05.10.2016 14:01:54

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


  

Betrifft: AW: mehrere Private Sub Worksheet_Change von: Christof
Geschrieben am: 05.10.2016 14:38:57

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



  

Betrifft: AW: was ich zu bezweifeln wage.. von: Werner
Geschrieben am: 05.10.2016 19:49:28

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


  

Betrifft: AW: mehrere Private Sub Worksheet_Change von: Bianca
Geschrieben am: 05.10.2016 14:43:48

Hallo,

stimmt deine If Frage so?
Cells (Zeile, Spalte)...

was soll das Makro den machen?

lg Bianca


  

Betrifft: AW: mehrere Private Sub Worksheet_Change von: Christof
Geschrieben am: 05.10.2016 14:54:39

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


Beiträge aus den Excel-Beispielen zum Thema "mehrere Private Sub Worksheet_Change "