Excel завершает работу при запуске макроса

#excel #vba

Вопрос:

Этот код VBA работает нормально примерно для 5-6 циклов. После этого файл Excel завершает работу. Иногда файлы Excel восстанавливаются после завершения работы, а иногда и нет. Пожалуйста, помогите мне это исправить. Я не эксперт по VBA, чтобы исправить это. Спасибо.

 Sub GetSpecificLinks()
'The code searches a website for the contact page url amp; pastes it in cell B2. 

'First define all the variables
Dim ie As Object 'Internet Explorer
Dim html As Object ' HTML document
Dim myLinks As Object ' Links collection
Dim myLink As Object 'Single Link
Dim result As String
Dim myURL As String 'Web Links on worksheet
Dim LastRow As Integer ' VBA execution should stop here

Set ie = CreateObject("InternetExplorer.Application")

LastRow = Sheet1.Cells(Rows.Count, "A").End(xlUp).Row
'Loop through all the web links on the worksheet one by one and then do some things
For i = 2 To LastRow
    'Get the link from the worksheet and assign it to the variable
    myURL = Sheet1.Cells(i, 1).Value
    'Now go to the website
    ie.navigate myURL
    'Keep the internet explorer visible
    ie.Visible = True
    'Ensure that the web page has downloaded completely
    While ie.readyState <> 4
        DoEvents
    Wend
    'Get the data from the web page that is in the links and assign it to the variable
    result = ie.document.body.innerHTML
    'create a new html file
    Set html = CreateObject("htmlfile")
    'now place all the data extracted from the web page into the new html document
    html.body.innerHTML = result

    Set myLinks = html.getElementsByTagName("a")
    'loop through the collected links and get a specific link defined by the conditions
    For Each myLink In myLinks
        If myLink Like "*contact*" Or myLink Like "*nquiry*" Or myLink Like "*investor*" Or myLink Like "*relation*" Then
            Sheet1.Cells(i, "B").Value = myLink
        End If
        'go to the next link
    Next myLink
    'once the last web link on the sheet has been visited close the internet explorer
    If i = LastRow Then
        ie.Quit
    End If
    'go to the next web link on the worksheet
Next i

End Sub
 

Комментарии:

1. Не вижу ничего, что могло бы вызвать сбой, может быть InternetExplorer, это не так …. здорово … не могли бы вы вместо этого выполнить веб-запрос? Кроме того, вы намеревались перезаписать значение в столбце B для каждой найденной ссылки?

2. Кроме того, это единственный код, который у вас есть во всей книге? Или у вас также есть другие вещи в событиях, таких как событие изменения?

3. @RyanWildry спасибо за отзыв. Я ценю это. Я понятия не имею, как выполнить веб-запрос. Не могли бы вы показать мне, как это сделать? Что касается перезаписи значения в столбце B, я специально ищу URL страницы контактов. Поэтому в идеале он не должен перезаписываться. Спасибо.

4. @braX это единственный код во всей книге. Больше ничего нет. Любая помощь от вашего goodself очень ценится. Я не программист, поэтому не очень разбираюсь в техническом жаргоне. Извините за это.

5. Самый простой способ, если у вас более новая версия Excel, — использовать функцию WebService . Application.WorksheetFunction.WebService("www.google.com") выполнит GET запрос по запрашиваемому URL-адресу. Это потенциально может стать html.body.innerHTML = Application.WorksheetFunction.WebService("MYSITEGOESHERE") . Если вы этого не сделаете, посмотрите запросы XHR (WebRequests), вот руководство, которое я нашел в Интернете simpleexcelvba.com/how-to-get-http-request-with-xmlhttprequest

Ответ №1:

Возможно, это не проблема, но вам не нужно проверять наличие последней строки, чтобы выполнить ie.quit. Удалите этот оператор if и переместите ie.Уходите после следующего «я».

Комментарии:

1. Спасибо за совет @igittr, однако это не решило проблему. Excel по-прежнему завершает работу после 5-6 успешных циклов. Я попробовал запустить его на другом ноутбуке. Улучшения не было. Excel по-прежнему выходит из строя. У меня такое ощущение, что это как-то связано с самими веб-сайтами, а не с Excel…