Ниже показано, как сделать один выпадающий список (в нем собраны все optgroup
с). Он избегает использования браузера и работает с более быстрым запросом xmlhttp. Я использую getElementById
, чтобы получить родительский элемент select
, а затем getElementsByClassName
, чтобы получить дочерние элементы тега option
. Я зацикливаюсь с 1, чтобы избежать пустого первого элемента.
Ссылки (VBE> Инструменты> Ссылки):
- Библиотека объектов Microsoft HTML
VBA:
Option Explicit
Public Sub GetOptions()
Dim html As Object, ws As Worksheet, headers()
Dim i As Long, r As Long, c As Long, numRows As Long
Set ws = ThisWorkbook.Worksheets("Sheet1")
Set html = New HTMLDocument
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", "https://www.europcar.co.za/", False
.send
html.body.innerHTML = .responseText
Dim pickupBranches As Object, pickupBranchResults()
Set pickupBranches = html.getElementById("PickupBranch_BranchID_id").getElementsByTagName("option")
headers = Array("Pickup Location", "option value")
numRows = pickupBranches.Length - 1
ReDim pickupBranchResults(1 To numRows, 1 To 2)
For i = 1 To numRows
pickupBranchResults(i, 1) = pickupBranches.item(i).innerText
pickupBranchResults(i, 2) = pickupBranches.item(i).Value
Next
With ws
.Cells(1, 1).Resize(1, UBound(headers) + 1) = headers
.Cells(2, 1).Resize(UBound(pickupBranchResults, 1), UBound(pickupBranchResults, 2)) = pickupBranchResults
End With
End With
End Sub