По сути, вы можете прочитать диапазон из 2 столбцов из Excel, содержащий столбец A reg и пробег столбца B, в 2d массив, а затем зациклить измерение 1 массива от lbound до ubound (т.е. строки) и получить доступ к региструи пробег путем индексации в массиве.Затем вы можете объединить эти значения в тело запроса POST.Это понятно очень высокий уровень, показанный ниже.Вы прочитали бы ответ в XML-документе, чтобы вы могли разобрать необходимую информацию.
С точки зрения получения значений нам нужно будет увидеть соответствующий XML.
Option Explicit
Public Sub Test()
'VBE > Tools > References > Add a reference to Microsoft HTML Object Library
'other code
Dim regAndMileage(), xmlDoc As Object
Dim ws As Worksheet, r As Long, placeholderMileage As String, placeholderVR As String, body As String, response As String, html As HTMLDocument
Const SUBSCRIBER_ID As Long = 123
Const PASSWORD As String = "ABC"
Set ws = ThisWorkbook.Worksheets("Sheet1")
Set html = New HTMLDocument
Set xmlDoc = CreateObject("MSXML2.DOMDocument")
regAndMileage = ws.Range("A2:B4").Value 'Create the array. Reg is in col A and mileage in col B. Check datatypes when passed are as expected (int - though Long should work; and string)
body = "<?xml version=""1.0"" encoding=""utf-8""?>"
body = body & Chr$(10) & "<soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">"
body = body & Chr$(10) & "<soap:Body>"
body = body & Chr$(10) & "<VRMValuation xmlns=""https://soap.cap.co.uk/vrm"">"
body = body & Chr$(10) & "<SubscriberID>" & SUBSCRIBER_ID & " </SubscriberID>" 'int
body = body & Chr$(10) & "<Password>" & PASSWORD & "</Password>" 'string
body = body & Chr$(10) & "<VRM>placeholderVRM</VRM>" 'string
body = body & Chr$(10) & "<Mileage>placeholderMileage</Mileage>" 'Mileage
body = body & Chr$(10) & "<StandardEquipmentRequired>boolean</StandardEquipmentRequired>"
body = body & Chr$(10) & "</VRMValuation>"
body = body & Chr$(10) & "</soap:Body>"
body = body & Chr$(10) & "</soap:Envelope>"
With CreateObject("MSXML2.XMLHTTP")
For r = LBound(regAndMileage, 1) To UBound(regAndMileage, 1)
mileage = regAndMileage(r, 1)
reg = regAndMileage(r, 2)
'create your body here and concatentate in your mileage and reg variables
.Open "POST", "protocol&domain/vrm/capvrm.asmx/VRMValuation", False
.setRequestHeader "SOAPAction", "https://soap.cap.co.uk/vrm/VRMValuation"
.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
.send Replace$(Replace$(body, placeholderVRM, reg), placeholderMileage, mileage)
response = .responseText
With xmlDoc
.validateOnParse = True
.setProperty "SelectionLanguage", "XPath"
.async = False
If Not .LoadXML(sResponse) Then
Err.Raise .parseError.ErrorCode, , .parseError.reason
End If
End With
'Do something to extract values
Next
End With
End Sub
См. this для получения дополнительной информации о диапазонах и массивах.
Потенциально вам необходимо добавить в запрос длину содержимого и другую информацию.
SOAP-запросы