Excel VBA授权在第一次运行时失败,在第二次运行时运行良好

Excel VBA授权在第一次运行时失败,在第二次运行时运行良好,excel,vba,api,authorization,Excel,Vba,Api,Authorization,我在Excel工作簿中有一个子系统,可以访问API 在第一次运行时,会弹出一个登录模式,就好像授权头尚未发送一样 如果我在未登录的情况下关闭该子系统并再次运行该子系统,则授权成功并返回我的数据 这仅在我第一次打开当天的工作簿时发生。下次打开工作簿时,授权成功。据我所知,我的代码是正确的。有什么建议吗 Dim hReq As Object Set hReq = CreateObject("MSXML2.XMLHTTP") hReq.Open "GET", APIURL, False hReq.se

我在Excel工作簿中有一个子系统,可以访问API

在第一次运行时,会弹出一个登录模式,就好像授权头尚未发送一样

如果我在未登录的情况下关闭该子系统并再次运行该子系统,则授权成功并返回我的数据

这仅在我第一次打开当天的工作簿时发生。下次打开工作簿时,授权成功。据我所知,我的代码是正确的。有什么建议吗

Dim hReq As Object
Set hReq = CreateObject("MSXML2.XMLHTTP")
hReq.Open "GET", APIURL, False
hReq.setRequestHeader "Authorization", "BASIC " & Base64Encoding(APIKEY & ":xxx")
hReq.Send

您是否考虑过添加一些错误处理

意识到这并不能回答为什么它在第一次尝试时不起作用。但是,它可能会解决您必须手动重新运行代码的问题

例如,您可以在hReq对象上使用.status方法:

If hReq.Status <> "200" Then
    Status_Request = hReq.Status
    Application.Wait Now + 0:00:01
将ErrorHandler:title放在代码更高的位置

或者可以对Status\u请求变量执行do-Untill循环

Counter = 0
Do Until hReq.Status<> "200"
    Counter = Counter + 1
    {Your code here}
    If Counter = 4 Then
        MsgBox("Reached the retry limit, trys: " & Counter)
        Exit Sub
    End If
计数器=0
直到hReq状态为“200”为止
计数器=计数器+1
{您的代码在这里}
如果计数器=4,则
MsgBox(“已达到重试限制,trys:&计数器)
出口接头
如果结束

为了防止代码运行到无限循环中,请添加一个计数器,并设置一个条件,在计数器达到x次重试次数后结束循环。

哦,电自转现象,当事情不应该工作时工作,当事情应该不工作时工作,工作簿打开时是否还有其他事情发生?有任何事件吗?这听起来像是一个类似于此的超时问题,或者更好的是工作簿上没有打开的事件,当我需要它们时,我会直接调用这些sub@Profex这些问题似乎并不相关。身份验证在我每次调用此sub时都会正确发生,但在给定的一天第一次运行它时除外,而且它不一定超时。它打开本机Excel登录模式,允许我登录到API服务,这一切都可以正常工作,并且不会超时。如果我在不登录的情况下关闭登录模式并再次运行sub,则授权会正确发生,并且所有预期数据都会一致返回。接受这个答案,因为这是一个不错的解决方案,这是一个非常缓慢的主题。我已经换了一个新雇主,无法测试或实施任何其他解决方案
Counter = 0
Do Until hReq.Status<> "200"
    Counter = Counter + 1
    {Your code here}
    If Counter = 4 Then
        MsgBox("Reached the retry limit, trys: " & Counter)
        Exit Sub
    End If