Ich habe mir eine Function gebastelt, die mir innerhalb des übergebenen Ranges alle Zahlen addiert (natürlich ohne die Zelle, aus der die Funktion aufgerufen wird) und die Summe als negativen Wert zurück gibt.
Beispiel:
A1: 1
A2: 2
A3: 3
A4: =psSumX(A1:A5) --> -19
A5: 13
Die Summe von A1:A5 ergibt NULL (und ist so gewollt).
Nun wollte ich noch verhindern, dass mir ein Eintrag, der nicht eine Zahl ist oder ein Fehlerwert die Funktion zu Fall bringt.
Also habe ich die entsrpechenden Abfragen gemacht:
If Left(rng.Text, 1) "#" Then
If IsNumeric(rng.Value) Then
Wenn diese Bedingungen nicht zutreffen, soll die nächste Zelle abgearbeitet werden.
Was mich nun irritiert ist, dass mit dieser Erweiterung, die ich nachstehend wieder auskommentiert habe, ein Zirkelbezug resultiert.
Was ist da falsch?
Gruss, Peter
Public Function psSumX(rngSumme As Range)
'' errechnet aus einem Bereich die Summe mit einem negativen Vorzeichen
'' so dass die Bereichssumme und der ermittelte Wert NULL ergibt
'' der Funktionsaufruf kann innerhalb des Bereiches stehen (bewirkt kein Zirkelbezug)
'' als Range kann ein Bezug eingegeben werden oder
'' der definierte Name (ohne Anführungszeichen)
Dim rngCaller As Range, rng As Range
Set rngCaller = Application.Caller
psSumX = 0
For Each rng In rngSumme
''If Left(rng.Text, 1) "#" Then
''If IsNumeric(rng.Value) Then
If rngCaller.Address(0, 0) rng.Address(0, 0) Then
psSumX = psSumX - rng.Value
Else
End If
''End If
''End If
Next
End Function