首页 > 解决方案 > 如何通过 Excel VBA 自动单击 Internet Explorer 11 中的“保存”按钮

问题描述

我在 Excel 中使用 VBA 自动打开网站、输入凭据、导航到特定页面,然后单击下载文件的链接。当我这样做时,会弹出以下下载对话框,而不是在底部获取文件下载栏:

下载对话框

我从各种资源中拼凑起来的代码可以让我一直走到这里,但我一生都无法弄清楚如何自动化选择“保存”的过程。我试过sendkeys无济于事。我试过使用https://stackoverflow.com/a/32152712/5106668但我也无法让它工作,而且它似乎更适合文件下载栏在底部弹出的情况。如果我添加一个 debug.print 以在即时窗口中获取 h 的值,它会显示为 0。

这是我的代码:

Sub UserData_Export()

Dim ieApp As Object
Dim ieDoc As Object
Dim path As String

'create a new instance of ie
Set ieApp = New InternetExplorer

'you don’t need this, but it’s good for debugging
ieApp.Visible = True

'assume we’re not logged in and just go directly to the login page
ieApp.Navigate "https://login.XXXXXXXXXX.com/login"
Do While ieApp.Busy: DoEvents: Loop
Do Until ieApp.ReadyState = READYSTATE_COMPLETE: DoEvents: Loop

Set ieDoc = ieApp.Document

'fill in the login form – View Source from your browser to get the control names
With ieDoc.forms(0)
    .UserName.Value = "USERNAME"
    .Password.Value = "PASSWORD"
    .submit
End With

Application.Wait (Now + TimeValue("0:00:05"))
Do While ieApp.Busy: DoEvents: Loop
Do Until ieApp.ReadyState = READYSTATE_COMPLETE: DoEvents: Loop

'now that we’re in, go to the page we want
ieApp.Navigate "https://XXXXXXXXXX.com"
Do While ieApp.Busy: DoEvents: Loop
Do Until ieApp.ReadyState = READYSTATE_COMPLETE: DoEvents: Loop

'simulate clicking "Export Users" link
ieApp.Navigate "javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(" & Chr(34) & "ctl00$ctl00$ctl00$FormContentPlaceHolder$MainContentPlaceHolder$RightColumnPlaceHolder$ExportUsersLinkButton" & Chr(34) & ", " & Chr(34) & Chr(34) & ", true, " & Chr(34) & Chr(34) & ", " & Chr(34) & Chr(34) & ", false, true))"

'Wait for page to load
Do While ieApp.Busy Or Not ieApp.ReadyState = READYSTATE_COMPLETE
    DoEvents
Loop

' SAVE DIALOG HAS POPPED UP AT THIS POINT, CODE TO CLICK SAVE NEEDS TO GO HERE!!



'close 'er up
ieApp.Quit
Set ieApp = Nothing
End Sub

标签: excelvba

解决方案


推荐阅读