1

我有以下用于 MS Excel 的 VBA 函数。但是,我已将整个数据库导入 MS Access,我希望在不从 MS Excel 调用它的情况下使用此功能。可能吗?我必须改变什么?


`
'This is to find the GCDm (great circle distance) in miles

Function GCDnm(origin As String, dest As String) As Integer


Dim olat As Double
Dim olong As Double
Dim dlat As Double
Dim dlong As Double
Dim earthradius As Integer

earthradius = 6371

olat = coordlat(origin)
olong = coordlong(origin)
dlat = coordlat(dest)
dlong = coordlong(dest)

GCDnm = Round(WorksheetFunction.Acos(( _
    Sin(WorksheetFunction.Radians(olat)) * _
    Sin(WorksheetFunction.Radians(dlat)) + _
    Cos(WorksheetFunction.Radians(olat)) * _
    Cos(WorksheetFunction.Radians(dlat)) * _
    Cos(WorksheetFunction.Radians(olong - dlong)))) * _
    earthradius, 0) / 1.852

'GDCm = [arccos[sin(origin latitude) * sin(destination latitude) * cos(origin latitude)    * sin(destination latitude) * cos(origin latitude - dest latitude)]*radius=6371]/1.852

 End Function

`

4

2 回答 2

2

这篇博文 http://blogannath.blogspot.com.au/2010/05/microsoft-access-tips-tricks-excel.html解释了如何在访问中使用 excel 函数。基本上,您需要添加对 Excel 对象库的引用。之后,您可以访问几乎所有的 Excel 功能。只需确保在目标 PC 上安装了 Excel。

于 2013-10-30T08:01:17.783 回答
2

虽然您可以像 Makita 所说的那样自动化 Excel,但如果您随后在查询或类似的东西中使用该函数,性能可能会非常糟糕。我个人会用纯 VBA 重写代码:

Function ArcCos(Number As Double) As Double
  ArcCos = Atn(-Number / Sqr(-Number * Number + 1)) + 2 * Atn(1)
End Function

Function DegreesToRadians(Number As Double) As Double
  DegreesToRadians = Number / 57.2957795130823
End Function

'...

GCDnm = Round(ArcCos(( _
  Sin(DegreesToRadians(olat)) * _
  Sin(DegreesToRadians(dlat)) + _
  Cos(DegreesToRadians(olat)) * _
  Cos(DegreesToRadians(dlat)) * _
  Cos(DegreesToRadians(olong - dlong)))) * _
  earthradius, 0) / 1.852
于 2013-10-30T10:57:12.903 回答