2014-03-07 36 views
2

我正在使用以下函数,我通过Tools-> References添加了对Microsoft XML 6.0的引用。我不断收到“编译错误:用户定义类型未定义”。任何人都可以看到这个缺陷吗?调试器不断突出显示“googleResult As New MSXML2.DOMDocument”谢谢!Excel GoogleGeocode VB错误

Function GoogleGeocode(address As String) As String 
    Dim strAddress As String 
    Dim strQuery As String 
    Dim strLatitude As String 
    Dim strLongitude As String 

    strAddress = URLEncode(address) 

    'Assemble the query string 
    strQuery = "http://maps.googleapis.com/maps/api/geocode/xml?" 
    strQuery = strQuery & "address=" & strAddress 
    strQuery = strQuery & "&sensor=false" 

    'define XML and HTTP components 
    Dim googleResult As New MSXML2.DOMDocument 
    Dim googleService As New MSXML2.XMLHTTP 
    Dim oNodes As MSXML2.IXMLDOMNodeList 
    Dim oNode As MSXML2.IXMLDOMNode 

    'create HTTP request to query URL - make sure to have 
    'that last "False" there for synchronous operation 

    googleService.Open "GET", strQuery, False 
    googleService.send 
    googleResult.LoadXML (googleService.responseText) 

    Set oNodes = googleResult.getElementsByTagName("geometry") 

    If oNodes.Length = 1 Then 
    For Each oNode In oNodes 
     strLatitude = oNode.ChildNodes(0).ChildNodes(0).Text 
     strLongitude = oNode.ChildNodes(0).ChildNodes(1).Text 
     GoogleGeocode = strLatitude & "," & strLongitude 
    Next oNode 
    Else 
    GoogleGeocode = "Not Found (try again, you may have done too many too fast)" 
    End If 
End Function 


Public Function URLEncode(StringVal As String, Optional SpaceAsPlus As Boolean = False) As String 
    Dim StringLen As Long: StringLen = Len(StringVal) 

    If StringLen > 0 Then 
    ReDim result(StringLen) As String 
    Dim i As Long, CharCode As Integer 
    Dim Char As String, Space As String 

    If SpaceAsPlus Then Space = "+" Else Space = "%20" 

    For i = 1 To StringLen 
     Char = Mid$(StringVal, i, 1) 
     CharCode = Asc(Char) 

     Select Case CharCode 
     Case 97 To 122, 65 To 90, 48 To 57, 45, 46, 95, 126 
     result(i) = Char 
     Case 32 
     result(i) = Space 
     Case 0 To 15 
     result(i) = "%0" & Hex(CharCode) 
     Case Else 
     result(i) = "%" & Hex(CharCode) 
     End Select 
    Next i 
    URLEncode = Join(result, "") 
    End If 
End Function 
+3

您是否向VBA项目添加了对MSXML的引用? –

+0

是的,Microsoft XML 6.0通过工具 - >参考。 –

+0

对于我来说这适用于该参考。检查是否有任何其他引用标记为“丢失” –

回答

1

后期绑定解决了问题。

0

我有同样的原始问题,并通过添加60这两个DIM语句解决了这个问题:

Dim googleResult As New MSXML2.DOMDocument60 
Dim googleService As New MSXML2.XMLHTTP60 

即终止是由VBA建议,如果你立即开始重新键入该行,你到了“MSXML2 “。一部分。它现在可以在我的系统上正常工作。