Beim ändern des inhaltes der Zelle "L2" sollen die Spalten K und L addiert werden. Da nach jeder Addierten Zahl eine Änderung im Arbeitsblatt erfolgt wird bei jeder Addition die Worksheet_Change Funktion nochmal gestartet (Dadurch kommt es zum rekursiven Aufruf). Zum Addieren von 3 Zeilen braucht meine Funktion ca 4Sekunden !!! Beim Debuggen wird auch klar warum. Eben wegen dem mehrmaligen aufruf.
Welche Alternativen gibt es oder wie kann ich die Rekursion umgehen?
(Worksheet_SelectionChange führt zum gleichen Ergebnis).
Anbei folgt ein Auszug aus meinem bisherigen Programm .
'-------------------------
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Not Intersect(Target, Range("L2")) Is Nothing Then
'Schutz von Spalte K aufheben, Spalte K+L addieren _
'und wieder schützen
Call aendern
End If
End Sub
'-----------------------------------
Sub aendern()
Dim Merker As Double
Dim i As Integer
Dim intZeilenzahl As Integer
ActiveSheet.Unprotect
intZeilenzahl = ActiveSheet.UsedRange.Rows.Count
For i = 4 To intZeilenzahl - 1
If Worksheets("Aktivitäten").Cells(i, 11).HasFormula _
Or IsEmpty(Worksheets("Aktivitäten").Cells(i, 11)) Then
'MsgBox "nix tun" 'nix tun
Else
MsgBox "Addieren"
'Cells(Zeile, Spalte)
Merker = Worksheets("Aktivitäten").Cells(i, 11).Value
'Alten Wert aus Spalte K merken
Merker = Merker + Worksheets("Aktivitäten").Cells(i, 12).Value
'Addiere Spalte K und L
Worksheets("Aktivitäten").Cells(i, 11).Value = Merker
'Neuen Wert in Spalte K schreiben
Worksheets("Aktivitäten").Cells(i, 12).Value = 0
'Löschen der alten Werte in Spalte L
End If
Next
Worksheets("Aktivitäten").Activate
Worksheets("Aktivitäten").Select
Worksheets("Aktivitäten").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub