Ошибка подпрограммы или функции не определена в ArcCos - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь создать функцию в Excel для вычисления расстояния между двумя точками по широте и долготе.

Эта функция выдает мне ошибку

Ошибка компиляции:

Sub или функция не определены

Function DAVIDLATLON(lat1, lon1, lat2, lon2)
 DAVIDLATLON = ArcCos(Cos(Application.WorksheetFunction.Radians(90 - lat1)) * Cos(Application.WorksheetFunction.Radians(90 - lat2)) + Sin(Application.WorksheetFunction.Radians(90 - lat1)) * Sin(Application.WorksheetFunction.Radians(90 - lat2)) * Cos(Application.WorksheetFunction.Radians(lon1 - lon2))) * 6371
End Function

Ответы [ 3 ]

0 голосов
/ 04 декабря 2018

Нет встроенной функции VBA ArcCos.Вместо этого используйте worksheetfunction.acos.

Function DAVIDLATLON(lat1, lon1, lat2, lon2)
  DAVIDLATLON = WorksheetFunction.Acos(Cos(WorksheetFunction.Radians(90 - lat1)) * _
                                       Cos(WorksheetFunction.Radians(90 - lat2)) + _
                                       Sin(WorksheetFunction.Radians(90 - lat1)) * _
                                       Sin(WorksheetFunction.Radians(90 - lat2)) * _
                                       Cos(WorksheetFunction.Radians(lon1 - lon2))) * 6371
End Function
0 голосов
/ 04 декабря 2018

Поскольку функция ArcCos не известна VBA, я понимаю, что вы можете сначала определить функцию ArcCos, а затем ссылаться на нее из своей второй функции.

Function ArcCos(RadAngle)
    ArcCos = Atn(-RadAngle / Sqr(-RadAngle * RadAngle + 1)) + 2 * Atn(1)
End Function

Function DAVIDLATLON(Lat1, Lon1, Lat2, Lon2)
    DAVIDLATLON = ArcCos(Cos(Application.WorksheetFunction.Radians(90 - Lat1)) * Cos(Application.WorksheetFunction.Radians(90 - Lat2)) + Sin(Application.WorksheetFunction.Radians(90 - Lat1)) * Sin(Application.WorksheetFunction.Radians(90 - Lat2)) * Cos(Application.WorksheetFunction.Radians(Lon1 - Lon2))) * 6371
End Function
0 голосов
/ 04 декабря 2018

Проблема с функцией арккосинуса.Попробуйте:

Function DAVIDLATLON(lat1, lon1, lat2, lon2)
    With Application.WorksheetFunction
        DAVIDLATLON = .Acos(Cos(.Radians(90 - lat1)) * Cos(.Radians(90 - lat2)) + Sin(.Radians(90 - lat1)) * Sin(.Radians(90 - lat2)) * Cos(.Radians(lon1 - lon2))) * 6371
    End With
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...