Comment VBA fonction de rappel lorsque XMLHTTP onTimeOut?
Je suis en train d'essayer d'obtenir des données xml à partir du serveur vers excel, puis j'ai écrit un sendRequest
la fonction à appeler dans excel
=sendRequest("http://abb.com/index.php?id=111")
Lorsque le serveur web de la difficulté, ne peut pas se connecter ou ne peut pas trouver, excel ne répond pas, c'était horrible! Pour éviter cela, je pense que nous devrions mettre en timeOut. Ce sont mes fonction:
Function sendRequest(Url)
'Call service
Set XMLHTTP = CreateObject("Msxml2.ServerXMLHTTP.6.0")
'Timeout values are in milli-seconds
lResolve = 10 * 1000
lConnect = 10 * 1000
lSend = 10 * 1000
lReceive = 15 * 1000 'waiting time to receive data from server
XMLHTTP.setTimeOuts lResolve, lConnect, lSend, lReceive
XMLHTTP.OnTimeOut = OnTimeOutMessage 'callback function
XMLHTTP.Open "GET", Url, False
On Error Resume Next
XMLHTTP.Send
On Error GoTo 0
sendRequest = (XMLHTTP.responseText)
End Function
Private Function OnTimeOutMessage()
'Application.Caller.Value = "Server error: request time-out"
MsgBox ("Server error: request time-out")
End Function
Normalement, lorsque XMLHTTP
's délai d'attente se produit, événement OnTimeOutMessage
sera exécuté (référence #1, #2). Mais comme dans mon test, OnTimeOutMessage
est exécutée dès le début de sendRequest()
Comment utiliser la fonction de rappel lorsque Msxml2.ServerXMLHTTP.6.0 demande de délai?
Merci pour votre aide!
Merci!!!! mais je ne trouve pas Async solution. Je suis juste voulez utiliser la fonction de Rappel lorsque xmlhttp sur le délai d'attente. J'ai une petite raison de le faire, parce que mon serveur est faible, il sera
Connection refused
si j'envoie la demande tant de sendRequest - Excel
dans le même temps.Si vous ne voulez pas excel pour le verrouiller en place pendant que votre xmlhttp est en attente d'une réponse, alors vous aurez à utiliser des appels asynchrones. Vous pouvez l'utiliser pour traiter les événements.
OriginalL'auteur Davuz | 2012-07-10
Vous devez vous connecter pour publier un commentaire.
La ligne;
XMLHTTP.OnTimeOut = OnTimeOutMessage
N'est pas une méthode d'affectation; plutôt il exécute immédiatement
OnTimeOutMessage()
(et cède ses inutiles valeur de retour deOnTimeOut
).L'équivalent de la ligne dans JavaScript que par votre exemple de lien correctement attribue un
Function
objet deOnTimeOut
pour la suite invokation - ce n'est pas pris en charge par VBA.Au lieu de cela, vous pouvez intercepter l'erreur de dépassement de délai soulevées après
.send
ou utiliser la liaison précoce,WithEvents
, & inline gestionnaires d'événements.? I've searched
début de l'appel d'offres", mais j'ai trouvé pluslate-binding
résultat 🙁 vous Pouvez utiliserwithEvents
[ici][1]? Ce qui est sur la ligne de gestionnaire d'événement? Merci beaucoup! [1]cpearson.com/excel/Events.aspxOriginalL'auteur Alex K.
Tim est correct que si vous avez délais d'expiration de chaque demande de "bloquer" Excel/VBA jusqu'à ce que le temps s'est écoulé avant de continuer. À l'aide de async va vous permettre de plusieurs demandes sans une longue demande de retarder une réponse ou une demande en outre.
Le statut de la propriété représente le code de statut HTTP renvoyé par une requête. Il suffit de placer le code ci-dessous dans votre code existant pour ralentir synchrone vérifier ou de déplacer votre réponse au traitement à un gestionnaire d'événements pour async.
XMLHTTP.Send
délai d'attente,XMLHTTP.Status
est vide.Si vous voulez traiter spécifiquement les OnTimeOut événement ensuite mis en place un module de classe similaire pour le lien Tim fourni. Si l' .Statut renvoie une erreur, puis " htmlString = XMLHTTP.ResponseText " sera également causer une erreur; si vous gérer l'erreur correctement alors vous pouvez tester pour htmlString = vbnullstring et de savoir que vous avez un message d'erreur. Votre lien renvoie d'état 404 pour moi btw.
J'ai essayé avec la méthode async et
setTimeouts
mais ma fonction de sortie à n'importe où, je ne peut pas l'attraper erreur 408 -request timeout
à propos du code. où mettre votre code dans la démo à l'adresse dailydoseofexcel.com/archives/2006/10/09/async-xmlhttp-callsOriginalL'auteur osknows