Vielleicht haben Sie bei der Arbeit mit Excel schon mal eine Fehlermeldung erhalten, weil sich ein Zellbezug in einer Formel auf das Ergebnis der Formel bezieht und dadurch ein Zirkelbezug entsteht. Ein Zirkelbezug lässt sich leicht erzeugen. Geben Sie zum Beispiel in der Zelle A1 eines Arbeitsblattes die Formel "=A1" ein, und schon haben Sie einen Zirkelbezug. Abgesehen von der Fehlermeldung erscheint in der Statuszeile der Hinweis "Zirkelb.: A1".
Anhand einer benutzerdefinierten Funktion kann man einen Zirkelbezug quasi vortäuschen. Interessant ist dabei, dass der Zirkelbezug nicht aufgrund eines fehlerhaften Zellbezuges entsteht sondern aus einem anderen, nicht nachvollziehbaren Grund. Geben Sie einmal diesen Programmcode in ein Standardmodul des VBA-Projektes ein:
Public Function Zirkel() As Double
x = Application.Caller
Debug.Print "Aufruf von Zirkel"
End Function
In der obigen Funktion wird lediglich der Rückgabewert von Application.Caller einer Variable x zugewiesen und die Meldung "Aufruf von Zirkel" im Direktfenster ausgegeben.
Nachdem Sie den VBA-Code erfasst haben, geben Sie in einer beliebigen Zelle die Formel "=Zirkel()" ein. Es wird die nachstehend abgebildete Fehlermeldung angezeigt, und im VBA-Editor Direktfenster ist zu sehen, dass die Funktion zwei Mal aufgerufen wurde (es steht zwei Mal "Aufruf von Zirkel"):

Ursache des Zirkelbezuges
Mit "x = Application.Caller" wird eine Objektreferenz auf die Zelle mit der Formel angelegt. Dies hat scheinbar zur Folge, dass die Zellformel erneut berechnet wird und dadurch die Funktion nochmal ausgeführt wird. In der Funktion wird wieder eine Objektreferenz erstellt und somit die Formel ein weiteres mal berechnet bzw. die Funktion aufgerufen. Da dieser Vorgang eine Endlosschleife zur Folge hat, bricht Excel nach zwei Aufrufen ab und meldet einen Zirkelbezug.
Interessant ist, dass nur dann ein Zirkelbezug entsteht, wenn eine Objektreferenz auf die aufrufende Zelle erstellt wird. Würde man anstelle von "x = Application.Caller" beispielsweise die Anweisung "x = Application.Caller.Address" schreiben, entsteht kein Zirkelbezug.
The eXpLorer
Zuletzt aktualisiert am
3.01.2004 / 17:00 Uhr
© Copyright 2002-2004 by Philipp von Wartburg, CH-8917
Oberlunkhofen
Alle Rechte vorbehalten