Я долгое время скрывался на этом сайте, и я ценю все, что я узнал из каждого из ваших ответов, которые я видел. Теперь я хочу эффективно запустить код, который я написал с вашей помощью.
Проблема 1. Страница отображается как «не отвечающая» во время выполнения кода. Это происходит примерно 4 раза при каждом запуске. Кроме того, я получаю данные примерно через 1 минуту и 40 секунд. У моей компании не самый лучший интернет, поэтому, возможно, это занимает так много времени.
Проблема 2. Есть ли лучшая методология прохождения цикла, где код находится в одном макросе, а не в 10 отдельных макросах. Мой сайт изменяет только часть из четырех букв в URL-адресе (показанном как DYNAMICPORTION во втором коде ниже. Я попытался зациклить его с URL-адресом, который относится к диапазону, но не могу понять, как разместить эту информацию на новом рабочий лист внутри цикла.
Любая помощь будет оценена по достоинству! Еще раз спасибо!
Основной макрос
Sub GetAllData()
Dim t As Date
t = Now()
Application.Calculation = xlManual
Application.StatusBar = "Gathering Data 10%"
GetSiteData
Application.StatusBar = "Gathering Data 20%"
GetSite2Data
Application.StatusBar = "Gathering Data 30%"
GetSite3Data
Application.StatusBar = "Gathering Data 40%"
GetSite4Data
Application.StatusBar = "Gathering Data 50%"
GetSite5Data
Application.StatusBar = "Gathering Data 60%"
GetSite6Data
Application.StatusBar = "Gathering Data 70%"
GetSite7Data
Application.StatusBar = "Gathering Data 80%"
GetSite8Data
Application.StatusBar = "Gathering Data 90%"
GetSite9Data
Application.StatusBar = "Gathering Data 100%"
GetSite10Data
Application.Calculation = xlAutomatic
Application.StatusBar = Ready
MsgBox "It took " & Format(Now() - t, "hh:mm:ss") & " to gather the site's data!" & vbNewLine & "Please allow a minute to calculate!"
End Sub
Макрос под главной
Sub GetSiteData()
Dim XMLRequest As New MSXML2.XMLHTTP60
Dim HTMLDoc As New MSHTML.HTMLDocument
Dim HTMLTable As MSHTML.IHTMLElement
Dim HTMLTable2 As MSHTML.IHTMLElement
Dim TableRow As MSHTML.IHTMLElement
Dim TableCell As MSHTML.IHTMLElement
Dim RowNum As Long, ColNum As Long
Dim url As String: url = "https://thewebsite/theproduct/isextracted/index.cfm?site=DYNAMICPORTION&type=data"
Dim OutputSheet As Worksheet
Set OutputSheet = ThisWorkbook.Worksheets("Site")
OutputSheet.Cells.ClearContents
XMLRequest.Open "GET", url, False
XMLRequest.send
Do While XMLRequest.readyState <> 4
DoEvents
Loop
HTMLDoc.body.innerHTML = XMLRequest.responseText
Set HTMLTable = HTMLDoc.getElementById("TAB7")
Set HTMLTable2 = HTMLDoc.getElementById("TAB5")
RowNum = 0
ColNum = 0
For Each TableRow In HTMLTable.getElementsByTagName("tr")
RowNum = RowNum + 1
For Each TableCell In TableRow.Children
ColNum = ColNum + 1
OutputSheet.Cells(RowNum, ColNum).Value = TableCell.innerText
Next TableCell
ColNum = 0
Next TableRow
For Each TableRow In HTMLTable2.getElementsByTagName("tr")
RowNum = RowNum + 1
For Each TableCell In TableRow.Children
ColNum = ColNum + 1
OutputSheet.Cells(RowNum, ColNum).Value = TableCell.innerText
Next TableCell
ColNum = 0
Next TableRow
End Sub