使用VBA限制Excel中API调用的地理位置



我正在使用googlegeolocationsneneneba API在excel中获取地址的坐标。我查找的地址不会经常更改,所以每次重新计算工作簿时,一旦我有了lat,lng数据,我就不想一直调用API。我正在使用lat,lng来获取天气数据,这些数据将更频繁地重新计算。我尝试使用递归函数来调用编写该函数的单元格,看看我是否已经进行了API调用(我不想用相同的信息不断更新单元格(。我本来想在vba中使用isblank函数,但检查单元格是否有任何数据都准备好了,这对我来说不起作用。我认为我的代码是合理的,应该可以工作。有更好的方法吗?我有什么意义吗?

Function TT(Address As String, self As Integer) As Variant
Debug.Print "TT is open__________________________________"
Debug.Print Now()   
Dim key          As Integer
Dim latlng          As String
key = self
Debug.Print Address
Debug.Print self
'this will be set by the self value and should update???
If key = 0 Then
Debug.Print "****recursive call****"
key = 1
Call TT(Address, 1)
End If
latlng = GetCoordinates(Address)
Debug.Print latlng
Debug.Print "Excting function"
TT = latlng

终端功能

您的想法基本上是跟踪您已经处理的Address,并且只对尚未处理的调用GetCoordinates。关键是将已处理的Address存储在何处。

可能性包括

  • 在一张(隐藏的(纸上(向共产国际的评论点头(
  • 存储在静态数据结构中,例如Dictionary
  • 以(隐藏(名称存储
  • 以及许多其他

这里有一个静态字典版本。(后期绑定,有可选的早期绑定版本注释(

Function TT(Address As String, Optional Reset As Boolean = False) As String
Static LLs As Object 'Dictionary
Dim latlng As String
If LLs Is Nothing Then Set LLs = CreateObject("Scripting.Dictionary")  ' Set LLs = New Dictionary
If Reset Then LLs.RemoveAll
If LLs.Exists(Address) Then
TT = LLs(Address)
Else
latlng = GetCoordinates(Address)
LLs.Add Address, latlng
TT = latlng
End If
End Function

最新更新