Endlosschleife
29.11.2003 15:41:37
toni
ich habe folgendes Problem:
In einem Tabellenblatt ("Tabelle1") stehen in den Spalten A bis C numerische Werte.
Nun berechne ich in Spalte D die Summe der drei Werte. In Spalte E erscheint das Ergebnis der Multiplikation der drei Werte.
Folgenden Code habe ich dazu in ein allgmeines Modul eingefügt:
Dim zahl1 As Integer, zahl2 As Integer, zahl3 As Integer
Dim addition As Integer, multiplikation As Integer
Sub rechnen(zeile)
zahl1 = Range("A" & zeile).Value
zahl2 = Range("B" & zeile).Value
zahl3 = Range("C" & zeile).Value
addition = zahl1 + zahl2 + zahl3
multiplikation = zahl1 * zahl2 * zahl3
Range("D" & zeile).Value = addition
' Range("E" & zeile).Value = multiplikation
Debug.Print "addition:"; addition
Debug.Print "multiplikation:"; multiplikation
End Sub
Ich möchte nun erreichen, dass die Ergebnisse (Spalte E und D) automatisch aktualisiert werden, wenn einer der Werte in Spalte A , B oder C geändert wird. Wenn nicht alle Zellen (A, B, C) einer Zeile gefüllt sind soll in die Ergebniszellen eine 0 eingefügt werden.
Dazu benutze ich das Ereignis Worksheet_Change.
Der folgende Code steht im Klassenmodul von Tabelle1:
Dim zeile As Integer, ChangeBereich As Range
Private Sub Worksheet_Change(ByVal Target As Range)
zeile = Target.Row
Set ChangeBereich = Range(Cells(zeile, 1), Cells(zeile, 3))
If WorksheetFunction.CountBlank(ChangeBereich) = 0 Then
Call rechnen(zeile)
Else
Cells(zeile, 4).Value = 0
End If
End Sub
Wenn ich nur das Ergebnis der Addition sehen will, klappt das ganze einigermaßen. Allerdings springt das Programm nach der Zeile
Range("D" & zeile).Value = addition
wieder in die Prozedur Worksheet_Change.
Das ganze passiert etwa 100 mal (das Debug.Print erscheint so oft im Direktfenster)
Wenn ich beide Ergebnisse sehen will:
Range("D" & zeile).Value = addition
Range("E" & zeile).Value = multiplikation
lande ich sogar in einer Endlosschleife.
Kann mir vielleicht jemand erklären was da passiert und vor allem was ich ändern muss, um zu meinem gewünschten Ergebnis zu kommen.
Ich hoffe, ich stelle mich nur zu dumm an und es ist nur eine Kleinigkeit.
Ciao, Toni