Lars đã gặp sự cố khi sử dụng hàm ATAN2 trong macro. Anh ta đã phát triển một bộ hướng dẫn khá phức tạp, chỉ để VBA tạo ra lỗi khi nó cố sử dụng hàm ATAN2. Anh ấy đã có thể đơn giản hóa macro để có thể tạo lại vấn đề:

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

Khi mã được thực thi, lỗi được tạo ra trên dòng nơi ATAN2 được thực thi. Lars đã tự hỏi, chính xác, điều gì đã gây ra vấn đề.

Vấn đề rõ ràng là liên quan đến cách bạn đang thao tác với biến C. Đầu tiên bạn xác định C là 0, sau đó phủ định giá trị này. Không có cái gọi là số 0 âm, và khi bạn cố gắng phủ định giá trị, Excel dường như sẽ chùn bước khi giá trị đó sau đó được sử dụng trong công thức.

Một cách để giải quyết vấn đề đơn giản là thay đổi cách biến đổi C thành các giá trị bằng không. Thay đổi macro để nó trông giống như sau:

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

Bây giờ macro sẽ hoạt động tốt vì bạn chỉ thực hiện biến đổi trên C nếu nó không bằng 0.

Có vẻ như lỗi chỉ được tạo ra nếu C được xác định là giá trị dấu phẩy động. Nếu bạn thứ nguyên C là Số nguyên, thì macro ban đầu không tạo ra lỗi. Điều này có thể chỉ ra rằng vấn đề liên quan đến cách biểu diễn dấu phẩy động của số 0 âm không tồn tại được biểu diễn bên trong. Vì kiểu dữ liệu Integer xử lý nghiêm ngặt với các số nguyên, nên vấn đề biểu diễn đó không xảy ra.

Bạn cũng có thể giải quyết vấn đề nếu bạn khai báo C là kiểu dữ liệu Biến thể hoặc nếu bạn xóa hoàn toàn dòng khai báo (có nghĩa là VBA mặc định khai báo C là một Biến thể khi nó được sử dụng lần đầu).

_Lưu ý: _

Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên trang ExcelTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.

ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.

Mẹo này (2892) áp dụng cho Microsoft Excel 97, 2000, 2002 và 2003.