2015-11-19 5 views
-1

Я работаю над скриптом, который автоматически загружает Excel из URL. Проблема, с которой я сталкиваюсь, заключается в том, что время, после которого появляется диалоговое окно, не исправлено, поэтому я не могу записать время ожидания. Мне нужен код, который будет ждать появления диалогового окна, а затем нажмите кнопку «Сохранить как». Заранее спасибоПодождите, пока в VBA не появится диалоговое окно загрузки

+1

[Do События] (https://msdn.microsoft. ком/EN-US/библиотека/aa262728 (v = vs.60) .aspx)? –

+0

Пожалуйста, покажите код, который вы пытаетесь использовать уже. Не показывая свой код, трудно предложить соответствующее разрешение тому, что может быть очень конкретной проблемой. –

+0

это может быть полезно, может быть, это не так (мне сложно знать, так как я не знаю, что вы уже пробовали ...) http://stackoverflow.com/questions/28651257/how-can -i-automate-the-download-dialog-box-in-ie-using-vba? rq = 1 –

ответ

0

Спасибо, что нашли время и ответили на мой вопрос.

Наконец-то я выясню, как работать над этим. Я использовал приведенный ниже код.

Dim website 
website = "http://yoursite.com" 
With IE 
    .Visible = True 
    .navigate website 
End With 

Application.Wait (Now + TimeValue("0:00:02")) 
Cells(1, 1) = GetTitle 
var = CheckTitle(Cells(1, 1)) 
Do While var = False 
    Cells(1, 1) = GetTitle 
    var = CheckTitle(Cells(1, 1)) 
Loop 
Cells(1, 1) = "" 

Функция GetTitle()

Dim ActiveWindowHandle As Long 
'get the handle of the active window 
ActiveWindowHandle = GetForegroundWindow() 

Dim Title As String * 255 

' get the title of the active window 
GetWindowText ActiveWindowHandle, Title, Len(Title) 
'MsgBox myString 
GetTitle = Trim(Title) 

End Function

Функция CheckTitle (checkval As String) As Boolean

If checkval <> "Internet Explorer" Then 
    CheckTitle = False 
    Application.Wait (Now + TimeValue("0:0:10")) 
Else 
    CheckTitle = True 
End If 

End Function

0

Я не уверен, в каком виде диалогового окна вы обращаетесь, но вот несколько сценариев, которые будут загружать файлы из Интернета.

Поместите это в ячейку A1: http://www.math.smith.edu/r/data/help.xlsx

Поместите это в ячейку B1: C: \ Users \ Пользователь \ Desktop \ или путь, по которому вы хотите, чтобы загрузить файл

Положите это в cell C1: Скачивание файла успешно!

Запустить этот код.

Private Declare Function URLDownloadToFile Lib "urlmon" Alias _ 
    "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal _ 
    szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long 

Private Sub pMain() 
    Dim sURL As String 
    Dim sDestination As String 
    Dim bSuccess As Boolean 
    Dim lRow As Long 
    Dim ws As Excel.Worksheet 
    Dim strSavePath As String 
    Dim URL As String, ext As String 
    Dim buf, ret As Long 

    'Change to suit 
    Set ws = ThisWorkbook.Worksheets("Sheet1") 

    With ws 
    For lRow = 1 To .Cells(.Rows.Count, "A").End(xlUp).Row 
     sURL = .Cells(lRow, "A") 
     sDestination = .Cells(lRow, "B") 

     buf = Split(sURL, ".") 
     ext = buf(UBound(buf)) 

     pos = InStrRev(sURL, "/", -1) 
     file = Mid(sURL, pos + 1, 99) 
     strSavePath = sDestination & file 
     ret = URLDownloadToFile(0, sURL, strSavePath, 0, 0) 
      If ret = 0 Then 
       .Cells(lRow, "C") = "File download successfully!" 
      Else 
       .Cells(lRow, "C") = "Couldn't download the file!" 
      End If 

     DoEvents 
    Next lRow 
    End With 
End Sub 

Кроме того, попробуйте это ...

Private Declare Function URLDownloadToFile Lib "URLMON" Алиас _ "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal _ szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long

Sub DownloadFilefromWeb() 
    Dim strSavePath As String 
    Dim URL As String, ext As String 
    Dim buf, ret As Long 
    URL = Worksheets("Sheet1").Range("A2").Value 
    buf = Split(URL, ".") 
    ext = buf(UBound(buf)) 
    strSavePath = "C:\Users\your_path\Desktop\" & "DownloadedFile." & ext 
    ret = URLDownloadToFile(0, URL, strSavePath, 0, 0) 
    If ret = 0 Then 
     MsgBox "Download has been succeed!" 
    Else 
     MsgBox "Error" 
    End If 
End Sub 
+0

Привет Спасибо за ответ –

+0

Dim веб-сайт сайт = "http://gcm-perceive.nam.nsroot.net /qtv/report_contents.jsp?report-id=31&ver=1&node-id= "& server &" & c = 0 & sd = "& fDate &" & ed = "& lDate &" & theme-id = portal & r = excel " С IE .Visible = True .navigate сайт Do Хотя IE.Busy Или IE.readyState <> 4 DoEvents Loop End с –

+0

Я использую этот код, чтобы открыть веб-страницу, которая начнет обработку. По завершении обработки появится диалоговое окно загрузки. Я могу обрабатывать диалоговое окно с помощью SendKeys. –

Смежные вопросы