Тайм-аут отлова на VBA WinHttpRequest - PullRequest
1 голос
/ 30 апреля 2019

Я хочу установить значения тайм-аута и перехватить это событие, если оно происходит с использованием VBA и Excel.До сих пор я пытался с XMLHTTP60 и WinHttpRequest:

    Set XMLHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
    With XMLHTTP
        .setTimeouts 11, 11, 11, 11 'Values for testing to get a timeout
        '.setTimeouts TIMEOUT_LRESOLVE, TIMEOUT_LCONNECT, TIMEOUT_LSEND, TIMEOUT_LRECEIVE
        .Open "GET", currenturl, False
        .send
        '.waitForResponse 1 'testing
        If .responseText Like "*PATH_NOT_FOUND*" Or .responseText Like "*OUTSIDE_BOUNDS*" Then
            noroutefound = True
            GoTo skiploop
        End If
        str = Split(.responseText, "{""startTime"":")
        complstr = .responseText
    End With

Однако я не могу отловить ошибку, вызванную тайм-аутом, или сам тайм-аут.

Как я могу поймать тайм-аут?

1 Ответ

2 голосов
/ 30 апреля 2019

Добавить обработку ошибок On Error GoTo errHand до ожидаемой ошибки и в errHand: убедитесь, что у вас есть

'Code
On Error GoTo errHand:
'Code producing error
Exit Sub
errHand

If err.Number <> 0 Then
     Debug.Print err.Message
End If
Exit Sub

Если у вас есть интересующий номер ошибки, вы можете использовать select case err.Number для обработки вашегоконкретная ошибка с учетом типа, например:

errHand:

Select Case Err.Number
    Case -2147012894 'Code for Timeout
        Msgbox "Timeout"
    Case -2147012891 'Code for Invalid URL
        Msgbox "Invalid URL"
    Case Else 'Add more Errorcodes here if wanted
        MsgBox "Errornumber: " & Err.Number & vbnewline & "Errordescription: " & Error(Err.Number)
End select
...