Errore durante l’utilizzo della funzione ATAN2 nella macro (Microsoft Excel)
Lars ha riscontrato un problema utilizzando la funzione ATAN2 in una macro. Ha sviluppato un insieme di istruzioni piuttosto complicato, solo per fare in modo che VBA generi un errore quando ha provato a utilizzare la funzione ATAN2. È riuscito a semplificare la macro in modo da poter ricreare il problema:
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
Quando il codice viene eseguito, l’errore viene generato sulla riga in cui viene eseguito ATAN2. Lars si chiedeva cosa, esattamente, avesse causato il problema.
Il problema è apparentemente correlato a come stai manipolando la variabile C. In primo luogo si definisce C come zero, quindi si nega questo valore. Non esiste uno zero negativo e quando si tenta di negare il valore, a quanto pare Excel si oppone quando tale valore viene successivamente utilizzato nella formula.
Un modo per risolvere il problema è semplicemente cambiare il modo in cui C viene trasformato per tenere conto dei valori zero. Cambia la macro in modo che assomigli a questo:
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
Ora la macro funzionerà bene perché stai solo facendo la trasformazione su C se non è uguale a zero.
Sembra inoltre che l’errore venga generato solo se C è definito come valore a virgola mobile. Se si dimensiona C come numero intero, la macro originale non genera un errore. Ciò potrebbe indicare che il problema è correlato al modo in cui viene rappresentata internamente una rappresentazione in virgola mobile dello zero negativo inesistente. Poiché il tipo di dati Integer si occupa strettamente di numeri interi, questo problema di rappresentazione non si verifica.
Puoi anche eliminare il problema se dichiari C come tipo di dati Variant o se rimuovi completamente la riga di dichiarazione (il che significa che VBA dichiara di default C come Variant quando viene utilizzato per la prima volta).
_Nota: _
Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.
ExcelTips è la tua fonte di formazione economica su Microsoft Excel.
Questo suggerimento (2892) si applica a Microsoft Excel 97, 2000, 2002 e 2003.