How to VBA callback function when XMLHTTP onTimeOut?

后端 未结 2 943
谎友^
谎友^ 2021-01-05 05:23

I\'m trying get xml data from webserver to excel, then I wrote a sendRequest function to call in excel

=sendRequest(\"http://abb.com/index.php?id=

相关标签:
2条回答
  • 2021-01-05 06:10

    The line;

    XMLHTTP.OnTimeOut = OnTimeOutMessage

    Is not a method assignment; rather it immediately executes OnTimeOutMessage() (and assigns its useless return value to OnTimeOut).

    The equivalent line in JavaScript as per your example link correctly assigns a Function object to OnTimeOut for subsequent invokation - this is not supported by VBA.

    Instead, you could trap the timeout error raised after .send or use early binding, WithEvents, & inline event handlers.

    0 讨论(0)
  • 2021-01-05 06:13

    Tim is correct in that if you have timeouts then each request will 'hang' Excel/VBA until the timeout duration has elapsed before continuing. Using async will allow you multiple requests without a long request delaying either a response or further requests.

    The status property represents the HTTP status code returned by a request. Just place the code below in your existing code for a slower synchronous check or move your response processing to an event handler for async.

    XMLHTTP.Send
    
    If XMLHTTP.Status = "200" Then
        '200      OK
        htmlString = XMLHTTP.ResponseText
    Elseif XMLHTTP.Status = "408" Then
        '408      Request Timeout
        Call OnTimeOutMessage
    else
        'All status return values
        'Number      Description
        '100      Continue
        '101      Switching protocols
        '200      OK
        '201      Created
        '202      Accepted
        '203      Non-Authoritative Information
        '204      No Content
        '205      Reset Content
        '206      Partial Content
        '300      Multiple Choices
        '301      Moved Permanently
        '302      Found
        '303      See Other
        '304      Not Modified
        '305      Use Proxy
        '307      Temporary Redirect
        '400      Bad Request
        '401      Unauthorized
        '402      Payment Required
        '403      Forbidden
        '404      Not Found
        '405      Method Not Allowed
        '406      Not Acceptable
        '407      Proxy Authentication Required
        '408      Request Timeout
        '409      Conflict
        '410      Gone
        '411      Length Required
        '412      Precondition Failed
        '413      Request Entity Too Large
        '414      Request-URI Too Long
        '415      Unsupported Media Type
        '416      Requested Range Not Suitable
        '417      Expectation Failed
        '500      Internal Server Error
        '501      Not Implemented
        '502      Bad Gateway
        '503      Service Unavailable
        '504      Gateway Timeout
        '505      HTTP Version Not Supported
    
    End If
    
    0 讨论(0)
提交回复
热议问题