msxml2.xmlhttp 송신 메소드는 조기 바인딩과 함께 작동하며 늦은 바인딩으로 실패합니다.

StackOverflow https://stackoverflow.com/questions/308826

문제

아래 코드는 작동합니다. 그러나 내가 줄을 언급하면 Dim objRequest As MSXML2.XMLHTTP 그리고 줄을 타협합니다 Dim objRequest As Object 오류 메시지로 실패합니다.

파라미터가 잘못되었습니다

왜, 그리고 어떤 일이 있으면 무엇을 할 수 있습니까?

Public Function GetSessionId(strApiId, strUserName, strPassword) As String

    Dim strPostData As String

    Dim objRequest As MSXML2.XMLHTTP
    'Dim objRequest As Object '

    strPostData = "api_id=" & strApiId & "&user=" & strUserName & "&password=" & strPassword

    Set objRequest = New MSXML2.XMLHTTP
    With objRequest
        .Open "POST", "https://api.clickatell.com/http/auth", False
        .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
        .send strPostData
        GetSessionId = .responseText
    End With

End Function

Corey, 예, MSXML 유형 라이브러리에 대한 참조없이 내 코드가 작동하기 위해서는 그렇게해야한다는 것을 알고 있습니다. 그것은 여기에 문제가되지 않습니다. 사용하면 코드가 실패합니다 Dim objRequest As Object 내가 사용하든 상관없이

Set objRequest = NEW MSXML2.XMLHTTP 참조와 함께

Set objRequest = CreateObject("MSXML2.XMLHTTP") 참조없이.

도움이 되었습니까?

해결책

어떤 이유로 든 이것은 다음과 같습니다.

Dim strPostData As String
Dim objRequest As Object

strPostData = "api_id=" & strApiId & "&user=" & strUserName & "&password=" & strPassword

Set objRequest = New MSXML2.XMLHTTP
With objRequest
  .Open "POST", "https://api.clickatell.com/http/auth", False
  .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
  .send (strPostData)
   GetSessionId = .responseText
End With

URL 인코딩을 구축하는 대신 strPostData 문자열 연결을 통해 강하게 URL 인코딩 기능을 사용하는 것이 좋습니다.

strPostData = "api_id=" & URLEncode(strApiId) & _
              "&user=" & URLEncode(strUserName) & _
              "&password=" & URLEncode(strPassword)

a URLEncode() VBA의 함수는이 스레드에 있습니다. Excel VBA에서 문자열을 인코딩하려면 어떻게해야합니까?

다른 팁

Dim ObjRequest를 Object로 사용하면 코딩해야합니다.
set objrequest = createobject ( "msxml2.xmlhttp")

나는 이것이 위의 Tomalek의 코드와 거의 동일하다는 것을 알고 있지만 (모든 크레딧으로 인해!),이 질문은 내가 가진 문제 (PHP 서버에 제출 한 다음 응답을 다루는 Excel)에 대한 완전한 해결책을 향해 도움이되었습니다. 따라서 이것이 다른 사람에게 도움이되는 경우 :

Sub Button1_Click2()

Dim objXMLSendDoc As Object
Set objXMLSendDoc = New MSXML2.DOMDocument
objXMLSendDoc.async = False
Dim myxml As String
myxml = "<?xml version='1.0'?><Request>Do Something</Request>"
If Not objXMLSendDoc.LoadXML(myxml) Then
    Err.Raise objXMLSendDoc.parseError.ErrorCode, , objXMLSendDoc.parseError.reason
End If

Dim objRequest As MSXML2.XMLHTTP
Set objRequest = New MSXML2.XMLHTTP
With objRequest
    .Open "POST", "http://localhost/SISADraftCalcs/Test2.php", False
    .setRequestHeader "Content-Type", "application/xml;charset=UTF-16"
    .setRequestHeader "Cache-Control", "no-cache"
    .send objXMLSendDoc
End With

Dim objXMLDoc As MSXML2.DOMDocument
Set objXMLDoc = objRequest.responseXML
If objXMLDoc.XML = "" Then
    objXMLDoc.LoadXML objRequest.responseText
    If objXMLDoc.parseError.ErrorCode <> 0 Then
        MsgBox objXMLDoc.parseError.reason
    End If
End If

Dim rootNode As IXMLDOMElement
Set rootNode = objXMLDoc.DocumentElement

MsgBox rootNode.SelectNodes("text").Item(0).text

End Sub
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top