Lars stieß bei der Verwendung der ATAN2-Funktion in einem Makro auf ein Problem. Er entwickelte einen ziemlich komplizierten Befehlssatz, nur damit VBA beim Versuch, die ATAN2-Funktion zu verwenden, einen Fehler erzeugte. Er konnte das Makro vereinfachen, um das Problem neu zu erstellen:

Sub Test()

Dim A As Double

Dim C As Double     Dim E As Double

A = 5908     C = 0     C = -C     E = 180 / WorksheetFunction.Pi

MsgBox E * WorksheetFunction.Atan2(C, A)

End Sub

Wenn der Code ausgeführt wird, wird der Fehler in der Zeile generiert, in der ATAN2 ausgeführt wird. Lars fragte sich, was genau das Problem verursachte.

Das Problem hängt anscheinend damit zusammen, wie Sie die C-Variable manipulieren. Sie definieren C zuerst als Null und negieren dann diesen Wert. Es gibt keine negative Null, und wenn Sie versuchen, den Wert zu negieren, wird Excel anscheinend blockiert, wenn dieser Wert anschließend in der Formel verwendet wird.

Eine Möglichkeit, das Problem zu lösen, besteht einfach darin, die Art und Weise zu ändern, in der C transformiert wird, um Nullwerte zu berücksichtigen. Ändern Sie das Makro so, dass es so aussieht:

Sub Test()

Dim A As Double

Dim C As Double     Dim E As Double

A = 5908     C = 0     If C <> 0 Then C = -C     E = 180 / WorksheetFunction.Pi

MsgBox E * WorksheetFunction.Atan2(C, A)

End Sub

Jetzt funktioniert das Makro einwandfrei, da Sie die Transformation nur für C durchführen, wenn sie nicht gleich Null ist.

Es scheint auch, dass der Fehler nur generiert wird, wenn C als Gleitkommawert definiert ist. Wenn Sie C als Ganzzahl dimensionieren, generiert das ursprüngliche Makro keinen Fehler. Dies könnte darauf hinweisen, dass das Problem damit zusammenhängt, wie eine Gleitkommadarstellung der nicht vorhandenen negativen Null intern dargestellt wird. Da der Datentyp Integer ausschließlich ganze Zahlen behandelt, tritt dieses Darstellungsproblem nicht auf.

Sie können das Problem auch beheben, wenn Sie C als Variant-Datentyp deklarieren oder wenn Sie die Deklarationszeile vollständig entfernen (was bedeutet, dass VBA bei der ersten Verwendung standardmäßig C als Variant deklariert).

_Hinweis: _

Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der ExcelTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.

ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.

Dieser Tipp (2892) gilt für Microsoft Excel 97, 2000, 2002 und 2003.