【问题标题】:How to download a file from internet explorer using VBA如何使用 VBA 从 Internet Explorer 下载文件
【发布时间】:2016-12-23 07:47:28
【问题描述】:

我正在尝试从 Internet Explorer 11 下载 Excel 工作簿,当我单击该链接时,会出现以下弹出消息:

我尝试使用 sendkeys "%s" 但没有成功。如果不使用 IE,我无法使用代码从 Internet 下载文件,因为 URL 是我公司的 Intranet 站点。

Sub Site()
    Dim IE As Object
    Set IE = CreateObject("InternetExplorer.application")
    With IE
        .Visible = True
        .Navigate "http://asint010/IntegradorProfit/Pages/Relatorios/FluxoSolicitacao.aspx"

        While .Busy Or .ReadyState <> 4
            DoEvents
        Wend

        .document.All("ctl00_ContentPlaceHolder1_btnexportar").Click
        While .Busy Or .ReadyState <> 4
            DoEvents
        Wend

       'here I don't know what to do

    End With
End Sub

【问题讨论】:

  • 希望你能找到答案。我无数次尝试这样做,但无济于事。您最终需要与“另存为”对话框或其他我无法使用的 IE 控件进行通信。
  • 这几乎每天都会被问到。使用搜索栏,右上角,搜索下载、internet、vba

标签: excel vba internet-explorer


【解决方案1】:

我正在使用此代码下载文件。您需要根据您的语言设置更改代码。您还可以删除一些不需要的声明函数行。

Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Declare PtrSafe Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String) As Long
    Declare PtrSafe Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As Long
    Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    Declare PtrSafe Function SendMessageByString Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
    Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    Declare PtrSafe Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
    Declare PtrSafe Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
    Declare PtrSafe Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hWnd As Long) As Long
    Declare PtrSafe Function SetFocus Lib "user32.dll" (ByVal hWnd As Long) As Integer

    Sub Site()
        Dim IE As Object
        Set IE = CreateObject("InternetExplorer.application")
        With IE
            .Visible = True
            .Navigate "http://asint010/IntegradorProfit/Pages/Relatorios/FluxoSolicitacao.aspx"

            While .Busy Or .ReadyState <> 4
                DoEvents
            Wend

            .document.All("ctl00_ContentPlaceHolder1_btnexportar").Click
            While .Busy Or .ReadyState <> 4
                DoEvents
            Wend

           'here I don't know what to do
            hpass = IE.hWnd
            DownloadFile (hpass)

        End With
    End Sub

    Sub DownloadFile(h As Long)
        Dim o As IUIAutomation
        Dim e As IUIAutomationElement
        Dim iCnd As IUIAutomationCondition
        Dim Button As IUIAutomationElement
        Dim InvokePattern As IUIAutomationInvokePattern

        Set o = New CUIAutomation
        h = FindWindowEx(h, 0, "Frame Notification Bar", vbNullString)
        If h = 0 Then Exit Sub

        Set e = o.ElementFromHandle(ByVal h)
        Set iCnd = o.CreatePropertyCondition(UIA_NamePropertyId, "Save")
        Set Button = e.FindFirst(TreeScope_Subtree, iCnd)
        Set InvokePattern = Button.GetCurrentPattern(UIA_InvokePatternId)
        InvokePattern.Invoke

        Application.Wait (Now + TimeValue("0:00:05"))
        Set iCnd = o.CreatePropertyCondition(UIA_NamePropertyId, "Close")
        Set Button = e.FindFirst(TreeScope_Subtree, iCnd)
        Set InvokePattern = Button.GetCurrentPattern(UIA_InvokePatternId)
        InvokePattern.Invoke
    End Sub

【讨论】:

    猜你喜欢
    • 2013-07-26
    • 2016-04-29
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多