Lars는 매크로에서 ATAN2 함수를 사용하는 데 문제가 발생했습니다. 그는 ATAN2 함수를 사용하려고 할 때 VBA가 오류를 생성하도록하기 위해 다소 복잡한 명령어 세트를 개발했습니다. 그는 문제를 재현 할 수 있도록 매크로를 단순화 할 수있었습니다.

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

코드가 실행되면 ATAN2가 실행되는 라인에 오류가 발생합니다. Lars는 정확히 무엇이 문제의 원인인지 궁금했습니다.

문제는 분명히 C 변수를 조작하는 방법과 관련이 있습니다. 먼저 C를 0으로 정의한 다음이 값을 부정합니다. 음수 0과 같은 것은 없으며 값을 부정하려고 할 때 Excel에서 해당 값이 나중에 수식에 사용될 때 분명히 방해합니다.

문제를 해결하는 한 가지 방법은 단순히 C가 0 값을 설명하도록 변환되는 방식을 변경하는 것입니다. 매크로를 다음과 같이 변경하십시오.

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

이제 매크로는 0이 아닌 경우에만 C에서 변환을 수행하기 때문에 정상적으로 작동합니다.

또한 C가 부동 소수점 값으로 정의 된 경우에만 오류가 생성되는 것으로 보입니다. C를 정수로 치수 화하면 원래 매크로가 오류를 생성하지 않습니다. 이것은 문제가 존재하지 않는 음수 0의 부동 소수점 표현이 내부적으로 어떻게 표현되는지와 관련이 있음을 나타낼 수 있습니다. Integer 데이터 유형은 정수를 엄격하게 다루기 때문에 그 표현 문제는 발생하지 않습니다.

또한 C를 Variant 데이터 유형으로 선언하거나 선언 행을 모두 제거하면 문제를 제거 할 수 있습니다 (즉, VBA가 처음 사용될 때 C를 Variant로 기본 선언 함을 의미합니다).

_ 참고 : _

이 페이지 (또는 ExcelTips 사이트의 다른 페이지)에 설명 된 매크로를 사용하는 방법을 알고 싶다면 유용한 정보가 포함 된 특별 페이지를 준비했습니다.

link : / excelribbon-ExcelTipsMacros [새 브라우저 탭에서 특별 페이지를 열려면 여기를 클릭하세요].

_ExcelTips_는 비용 효율적인 Microsoft Excel 교육을위한 소스입니다.

이 팁 (2892)은 Microsoft Excel 97, 2000, 2002 및 2003에 적용됩니다.