#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…