使用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
相关产品推荐
相关产品推荐

