Discussion:
angepasster Code funktioniert nicht!
(zu alt für eine Antwort)
Johann Rupp
2023-12-02 14:55:10 UTC
Permalink
Hallo Gruppe,

diesen Code habe ich aus einem anderem Tabellenblatt übernommen
und im neuen Tabellenblatt eingefügt.
Angepasst habe ich nur den Zielbereich.(E12:E104)

Private Sub Worksheet_Change(ByVal Target As Range)
Dim R As Range
Set Target = Intersect(Range("E12:E104"), Target)
If Target Is Nothing Then Exit Sub
Application.EnableEvents = False
For Each R In Target
If IsEmpty(R.Offset(0, -1)) Then R.Offset(0, -1) = 0
Next
Application.EnableEvents = True
End Sub

Es tut sich leider gar nichts und ich weiß nicht warum.
Ich sag schon mal Danke wenn mir jemand auf die Sprünge helfen könnte.

Gruß Johann
Stefan Ram
2023-12-02 15:34:16 UTC
Permalink
Post by Johann Rupp
Private Sub Worksheet_Change(ByVal Target As Range)
Dim R As Range
Set Target = Intersect(Range("E12:E104"), Target)
If Target Is Nothing Then Exit Sub
Application.EnableEvents = False
For Each R In Target
If IsEmpty(R.Offset(0, -1)) Then R.Offset(0, -1) = 0
Next
Application.EnableEvents = True
End Sub
Debug.Print-Anweisungen einbauen und die Ausgabe lesen.
(Zum Unterbrechen der Ereignisverarbeitung die Stopp-
Taste in der IDE verwenden.) Zum Beispiel (ungetestet):

Private Sub Worksheet_Change(ByVal Target As Range)
Debug.Print( "Worksheet_Change entered." )
Dim R As Range
Set Target = Intersect(Range("E12:E104"), Target)
If Target Is Nothing Then Exit Sub
Debug.Print( "Worksheet_Change NOT exited." )
Application.EnableEvents = False
For Each R In Target
Debug.Print( "In For Each." )
If IsEmpty(R.Offset(0, -1)) Then
Debug.Print( "IsEmpty True." )
R.Offset(0, -1) = 0
End If
Next
Application.EnableEvents = True
Debug.Print( "Worksheet_Change finished." )
End Sub

. Ich weiß nicht, ob man Ranges auch mit Debug.Print ausgeben kann.
Falls ja, dann am besten auch die kritischen Ranges mit ausgeben.

Die Subs für die Ereignisverarbeitung gehören übrigens nicht in
normale Code-Module, sondern in das Code-Modul der jeweiligen Tabelle.
Carlos Naplos
2023-12-03 14:34:32 UTC
Permalink
Post by Johann Rupp
Hallo Gruppe,
diesen Code habe ich aus einem anderem Tabellenblatt übernommen
und im neuen Tabellenblatt eingefügt.
Angepasst habe ich nur den Zielbereich.(E12:E104)
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim R As Range
  Set Target = Intersect(Range("E12:E104"), Target)
  If Target Is Nothing Then Exit Sub
  Application.EnableEvents = False
  For Each R In Target
    If IsEmpty(R.Offset(0, -1)) Then R.Offset(0, -1) = 0
  Next
  Application.EnableEvents = True
End Sub
Es tut sich leider gar nichts und ich weiß nicht warum.
Ich sag schon mal Danke wenn mir jemand auf die Sprünge helfen könnte.
Gruß Johann
Setze einen Haltepunkt auf die erste Zeile, also auf "Private Sub ...".
Dann gehe das Makro mit F8 Schritt für Schritt durch!

Wenn das Makro nicht anhält, ist vermutlich EnableEvents = False.
Das wird in Zeile 5 gesetzt. Wenn das Makro abstürzt, bleibt
EnableEvents = False, bis es manuell auf True gesetzt wird oder bis zum
Ende der Sitzung.

Mein Mustermakro sieht so aus:

Private Sub Worksheet_Change(ByVal Target As Range)

On Error GoTo ErrorHandler

Application.ScreenUpdating = False
Application.EnableEvents = False

If Intersect(Target, Range("BereichsName")) Is Nothing _
Then GoTo ErrorHandler

' Code

ErrorHandler:
Application.EnableEvents = True
Application.ScreenUpdating = True

End Sub

Gruß CN
Johann Rupp
2023-12-03 16:38:47 UTC
Permalink
Post by Johann Rupp
Hallo Gruppe,
diesen Code habe ich aus einem anderem Tabellenblatt übernommen
und im neuen Tabellenblatt eingefügt.
Angepasst habe ich nur den Zielbereich.(E12:E104)
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim R As Range
  Set Target = Intersect(Range("E12:E104"), Target)
  If Target Is Nothing Then Exit Sub
  Application.EnableEvents = False
  For Each R In Target
    If IsEmpty(R.Offset(0, -1)) Then R.Offset(0, -1) = 0
  Next
  Application.EnableEvents = True
End Sub
Danke Euch für den Versuch zu helfen.
Mein Fehler lag an (0, -1) in:
If IsEmpty(R.Offset(0, -1)) Then R.Offset(0, -1) = 0
In diesem Falle musste das "-" weg.

Gruß Johann

Lesen Sie weiter auf narkive:
Loading...