2016-08-16 77 views
3

我試圖從Internet Explorer 11下載一個Excel工作簿,當我點擊鏈接,該彈出消息,請從Internet Explorer中的文件出現:如何使用VBA

enter image description here

我我試圖使用sendkeys「%s」,但它不起作用。我無法使用代碼從互聯網下載文件,而無需使用IE,因爲該URL是我公司的內部網站點。

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 
+0

我希望你能找到答案。我曾試圖做這無數次無濟於事。您最終需要與「另存爲」對話框或其他無法使用的IE控件進行通信。 – Kyle

+1

這幾乎每天都在問。使用搜索欄,右上角和搜索下載,互聯網,vba – Sorceri

回答

0

我使用此代碼下載文件。您需要根據您的語言設置更改代碼。你也可以刪除一些你不需要的聲明函數行。

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