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

使用Bing Maps API获取坐标时遇权限错误的VBA技术问询

解决Bing Maps API访问权限错误问题

下面针对你遇到的「未经微软书面许可不得访问API」错误,列出几个排查和解决方向:

1. 确认API密钥的权限配置

  • 登录Bing Maps开发者后台,找到你的密钥对应的应用,检查是否启用了**地理编码(Geocoding)**权限(即REST服务中的Locations API)。即使密钥激活,未勾选对应权限也会触发权限拦截。
  • 检查密钥的IP限制:如果设置了IP白名单,确保发起请求的设备IP在允许范围内,不在名单里的请求会被拒绝。

2. 验证URL的正确性

  • 你的示例URL末尾key=参数是空的,实际请求要确保apiKey变量已替换为有效密钥。可以取消注释Debug.Print url,把输出的URL复制到浏览器直接访问,浏览器会返回更具体的错误信息(比如密钥无效、权限不足等)。
  • 地址编码要完整:你当前只替换了空格,像德语特殊字符(ä、ü)这类需要完整URL编码。可以添加一个自定义的URLEncode函数,确保所有特殊字符正确转义,避免API无法识别地址导致的权限类错误。

3. 检查账户配额与状态

  • 登录Bing Maps开发者后台查看API调用统计,确认是否超出了免费额度。免费额度用完后,即使密钥激活也会被限制访问,这种情况需要升级付费计划。

4. 修改后的代码示例

添加完整URL编码和错误状态检查:

' Set your valid Bing Maps API key
apiKey = "your_real_api_key"

' URL-encode the address to handle special characters
encodedAddress = URLEncode(address)

' Build the API request URL
url = "https://dev.virtualearth.net/REST/v1/Locations/" & encodedAddress & "?key=" & apiKey

'Debug.Print url ' Uncomment to verify the generated URL

' Send request with error checking
With CreateObject("MSXML2.XMLHTTP")
    .Open "GET", url, False
    .send
    responseText = .responseText
    
    ' Check for HTTP status errors
    If .Status <> 200 Then
        MsgBox "Request failed: " & .Status & " - " & .statusText
    End If
End With

' Custom URL encoding function
Function URLEncode(str As String) As String
    Dim objScript As Object
    Set objScript = CreateObject("ScriptControl")
    objScript.Language = "JScript"
    URLEncode = objScript.CodeObject.encodeURIComponent(str)
    Set objScript = Nothing
End Function

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 19:42:24