我创建了一个成功运行的宏,它正在发送呼叫并从Web服务接收响应。现在我想发送不同的调用(来自A列)并将resposne写入B列。 第一个请求已成功发送。但是,我总是在第二次请求时遇到运行时错误。
这是我的宏:
Sub API_CALL()
Dim sURL As String
Dim sEnv As String
Dim xmlDoc As New DOMDocument
Dim sEnvlength As Integer
Dim responseText As String
Dim MyString As String
Dim LastRow As Long
LastRow = Cells(Rows.Count, "A").End(xlUp).Row
For i = 2 To LastRow
MyString = Cells(i, 1)
Set ObjHttp = New MSXML2.XMLHTTP
sURL = "https://example.com/WebService.asmx"
sEnv = sEnv & "<?xml version=""1.0"" encoding=""utf-8""?>"
sEnv = sEnv & "<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/"">"
sEnv = sEnv & " <soap:Body>"
sEnv = sEnv & " <Command>" & MyString & "</Command>"
sEnv = sEnv & " </msg>"
sEnv = sEnv & " </soap:Body>"
sEnv = sEnv & "</soap:Envelope>"
sEnvlength = Len(sEnv)
ObjHttp.Open "POST", sURL, False
ObjHttp.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
ObjHttp.setRequestHeader "Content-Length", sEnvlength
ObjHttp.send (sEnv)
xmlDoc.LoadXML (ObjHttp.responseText)
responseText = xmlDoc.SelectNodes("//CommandResult")(0).Text 'on next i (=2) I got Error '91' - object variable or With block variable not set
Cells(i, 2) = responseText
Set xmlDoc = Nothing
Set ObjHttp = Nothing
Next i
End Sub
任何帮助都会非常感激!!!
答案 0 :(得分:2)
你的循环中缺少sEnv = ""
。
这就是为什么你的sEnv从第二个循环开始总是错误的。试试这个:
For i = 2 To LastRow
MyString = Cells(i, 1)
Set ObjHttp = New MSXML2.XMLHTTP
sURL = "https://example.com/WebService.asmx"
' Clear string first ...
sEnv = ""
sEnv = sEnv & "<?xml version=""1.0"" encoding=""utf-8""?>"
' ... and so on ...