You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac下CreateObject("MSXML2.ServerXMLHTTP")报Error 429问题求助

解决Mac系统VBA调用Bing Maps API的HTTP请求错误

问题根源

Windows上的MSXML2.ServerXMLHTTP是ActiveX专属组件,Mac系统的VBA不支持ActiveX对象,这就是Error 429的直接原因;Server.CreateObject依赖Windows ASP环境,Mac上同样无法生效。

解决方案:改用Mac兼容的HTTP请求对象

在Mac的VBA中,替换为XMLHTTP类的兼容实现,以下是修改后的GetDistance函数示例:

Function GetDistance(startAddr As String, endAddr As String, bingKey As String) As Double
    Dim objHTTP As Object
    Dim responseText As String
    Dim jsonResponse As Object
    
    ' 初始化Mac兼容的HTTP对象
    On Error Resume Next
    Set objHTTP = CreateObject("XMLHTTP")
    If Err.Number <> 0 Then
        Set objHTTP = CreateObject("MSXML.XMLHTTP")
        Err.Clear
    End If
    On Error GoTo 0
    
    If objHTTP Is Nothing Then
        GetDistance = -1 ' 返回错误标记
        Exit Function
    End If
    
    ' 构造Bing Maps API请求URL
    Dim requestURL As String
    requestURL = "https://dev.virtualearth.net/REST/v1/Routes/DistanceMatrix?" & _
                 "origins=" & URLEncode(startAddr) & _
                 "&destinations=" & URLEncode(endAddr) & _
                 "&travelMode=driving" & _
                 "&key=" & bingKey
    
    ' 发送请求
    objHTTP.Open "GET", requestURL, False
    objHTTP.Send
    
    ' 解析响应(需引入VBA-JSON库实现JSON解析)
    If objHTTP.Status = 200 Then
        responseText = objHTTP.ResponseText
        Set jsonResponse = JsonConverter.ParseJson(responseText)
        GetDistance = jsonResponse("resourceSets")(1)("resources")(1)("results")(1)("travelDistance")
    Else
        GetDistance = -1 ' 请求失败标记
    End If
    
    ' 清理对象
    Set objHTTP = Nothing
    Set jsonResponse = Nothing
End Function

' 辅助函数:实现URL编码(Mac VBA无内置URLEncode)
Function URLEncode(str As String) As String
    Dim bytes() As Byte
    Dim i As Integer
    Dim char As String
    bytes = StrConv(str, vbUnicode)
    For i = 0 To UBound(bytes) Step 2
        char = Hex(bytes(i))
        If Len(char) = 1 Then char = "0" & char
        URLEncode = URLEncode & "%" & char
    Next i
End Function

额外注意事项

  • JSON解析:Mac VBA无内置JSON解析能力,需将VBA-JSON库代码复制到你的VBA模块中使用,无需外部依赖。
  • 早期绑定选项:若要使用早期绑定,在Mac Office的VBA编辑器中依次点击工具->引用,勾选Microsoft XML, v6.0,之后可直接声明Dim objHTTP As MSXML2.XMLHTTP60。
  • 网络权限:确保Mac Office拥有网络访问权限,前往系统偏好设置->安全性与隐私->隐私->完全磁盘访问权限,添加对应Office应用。

内容的提问来源于stack exchange,提问作者CrustyCrustecean

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 05:36:16