使用VBscript自动关闭excel弹出提示

时间:2015-06-28 10:08:00

标签: excel vbscript popup http-basic-authentication

我有一个excel文件,它应该通过Web查询访问远程监控服务器。由于必须定期刷新和保存文件中的数据,因此我编写了一个.vbs脚本来执行此操作。它工作正常,但由于服务器使用基本的身份验证安全性,无法关闭,每次运行时,excel会弹出一个弹出窗口" Windows安全"窗口要求用户名和密码。可以选择"保存凭据",但仍然需要用户点击" OK"继续,但系统要求没有用户交互。

谷歌搜索我发现this stack exchange post和其他类似的方法,所以我修改了脚本以满足我的需求:

Set wshShell = CreateObject("WScript.Shell") 

Do 
    ret = wshShell.AppActivate("Windows Security") 
    If ret = True Then 
        wshShell.SendKeys "{enter}"
        Exit Do 
    End If 
    WScript.Sleep 500 
Loop 

当窗口出现时脚本会触发,甚至注册"输入"在我当时关注的任何窗口上按下按键,但它无法专注于弹出窗口本身。它在其他应用程序上运行得非常好,例如" Notepad"或"计算器"。这是以某种方式特定于弹出窗口吗?如何修改脚本以专注于" Excel"弹出?还有其他更简单或更可靠的替代方案吗?

由于

1 个答案:

答案 0 :(得分:1)

不幸的是,AppActivateSendKeys似乎并不总是在弹出窗口和对话框窗口上运行良好。

但是,有一个名为nircmd的命令行实用程序可以执行您所需的操作。无论如何,这是一个很好的工具,你可能会发现它的各种其他用途。

下载并将其放在与VBScript相同的文件夹中。或者,将其保存在System32/SysWow64文件夹或%path%环境变量中包含的任何其他文件夹中。然后在VBScript中包含以下语句:

With CreateObject("WScript.Shell")
    .Run "nircmd dlg """" ""Windows Security"" click ok"
End With

dlg命令具有以下参数:

dlg [Process Name] [Window Title] [Action] [Parameters]

我们会将[Process Name]留空("""")并提供[Window Title]。请注意,这里的引号加倍,因为它们是 VBS字符串文字中。对于最后一个参数,您需要指定要按/单击的按钮的控件ID。对于典型的对话框按钮(OKCancelYesNo等),您可以尝试使用nircmd的预定义控件ID:{{1 }},okcancelyes等。否则,您需要使用像Spy ++这样的工具来确定按钮的控件ID并将其传递给它。