|
|
Thema:
|
Excel 97/2000/2002 |
|
Vor allem in komplexen
Kalkulationsmodellen kann es schnell passieren, dass Excel plötzlich
eine Fehlermeldung über nicht auflösbare Zirkelbezüge anzeigt. Bei
einem Zirkelbezug hängt die Berechnung einer Formel direkt oder
indirekt vom Ergebnis der Zelle ab, in die Sie die Formel eingetragen
haben, so dass eine normale Berechnung nicht möglich ist. So erzeugen
Sie beispielsweise einen Zirkelbezug, wenn Sie die folgende Formel in
Zelle B20 eintragen:
=B20*2
In diesem Fall lässt sich die Ursache des Problems auf den ersten
Blick erkennen, aber es gibt Modelle, in denen der Fehler nicht so
eindeutig zu finden ist. Ausserdem kommt ein Zirkelbezug selten
allein, so dass die in der Statuszeile oder der Symbolleiste
"Zirkelbezug" angezeigte Zelle wenig hilfreich ist. In dem
folgenden Listing finden Sie daher eine VBA-Prozedur, die eine
wertvolle Hilfe bei der Fehlersuche in umfangreichen
Kalkulationsmodellen sein wird:
Sub ZirkelbezuegeAuflisten()
Set AktBlatt = ActiveSheet
Sheets.Add
Set NeuesBlatt = ActiveSheet
Zielbereich = ActiveCell.Address
AktBlatt.Activate
Zeilenzähler = 0
On Error GoTo MakroNeuAufnehmen
For Each Zelle In AktBlatt.UsedRange
If Left(Zelle.Formula, 1) = "=" Then
Ergebnis =
Intersect(AktBlatt.Range(Zelle.Address), _
AktBlatt.Range(Zelle.Precedents.Address))
NeuesBlatt.Range(Zielbereich).Offset(Zeilenzähler,
_
0).Value = Zelle.Address(False, False)
NeuesBlatt.Range(Zielbereich).Offset(Zeilenzähler,
_
1).Value = " " & Zelle.Formula
Zeilenzähler = Zeilenzähler + 1
Weiter:
End If
Next
Exit Sub
MakroNeuAufnehmen:
Resume Weiter
End Sub
Nachdem Sie auf eine beliebige Zelle innerhalb der entsprechenden
Tabelle geklickt und das Makro gestartet haben, wird automatisch ein
neues Arbeitsblatt erzeugt, in dem alle Zellen mit Zirkelbezügen
sowie den entsprechenden Formeln aufgeführt sind.
Die Funktionsweise des Makros ist schnell erklärt: In einer
For-Each-Schleife wird jede Zelle des aktiven Bereiches (UsedRange)
daraufhin überprüft, ob sie eine Formel enthält oder nicht. Sollte
das der Fall stellt das Makro mit Hilfe der Intersect-Methode fest, ob
es einen Schnittpunkt zwischen den Vorgängerzellen (Precedents) und
dem aktuellen Bezug gibt. Wenn diese Konstellation eintritt, liegt ein
Zirkelbezug vor und der Bezug sowie die Formel werden in das neue
Arbeitsblatt eingetragen. Ist kein Schnittpunkt vorhanden, wäre das
Ergebnis von "Intersect" normalerweise eine Fehlermeldung,
aber in unserem Fall wird der Fehler mit Hilfe von "On Error Goto"
auf eine Fehlerbehandlungsroutine gelenkt, die den nächsten
Schleifendurchlauf startet. |
|