Использование VB для автоматизации IE "сохранить цель как"

Я пытаюсь использовать макрос Excel VB для загрузки файлов Excel с сайта, защищенного паролем членства. Я использую объект «InternetExplorer», чтобы открыть окно браузера, войти в систему и перейти на нужную страницу, а затем сканирую нужные ссылки на странице. Использование Workbooks.Open (URLstring) не работает, потому что Excel не регистрируется. Вместо фактического файла он открывает страницу html с просьбой войти в систему.

Я бы предпочел использовать макрос VB для автоматизации события щелчка правой кнопкой мыши «сохранить цель как» в Internet Explorer по правильной ссылке, но я точно не знаю, как это сделать.

Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
4
0
16 413
2

Ответы 2

На самом деле нет способа сделать это с помощью API Internet Explorer. Если это просто одноразовый скрипт, вы, вероятно, можете оправдать использование SendKeys для себя.

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
...
Sub YourMacro()
    ... Navigate IE to the correct document, and get it to pop 
    up the "Save As" dialog ...

    Set sh = CreateObject("WScript.Shell")
    sh.AppActivate "File Download"
    sh.SendKeys "S"
    Sleep 100
    sh.SendKeys "C:\Path\filename.ext{ENTER}"
End Sub

Документация WScript.Shell

Если вы знаете URL-адрес файла, который хотите загрузить, вы можете использовать эту процедуру:

Sub HTTPDownloadFile(ByVal URL As String, ByVal LocalFileName As String)
    Dim http As Object ' Inet
    Dim Contents() As Byte

    Set http = New Inet
    Set http = CreateObject("InetCtls.Inet")
    With http
        .protocol = icHTTP
        .URL = URL
        Contents() = .OpenURL(.URL, icByteArray)
    End With
    Set http = Nothing

    Open LocalFileName For Binary Access Write As #1
    Put #1, , Contents()
    Close #1
End Sub

Другие вопросы по теме