Ошибка #Valor в зависимости от excel

Я создаю формулу, которая, когда я пишу число названное RTN devulve имя после Веб консультации, я например помещаю номер 08019002275485 в будку RTN, и он возвращает мне результаты, которого я нуждаюсь в имени "ПРЕДПРИЯТИЕ КОНСУЛЬТАЦИИ В INGIENERIA CONSULTING S Р L"

Код vba - следующий

Function Registro(RTN As String)
   Dim IE As Object
   Dim Respuesta As String

   Set IE = CreateObject("InternetExplorer.Application")
    IE.Navigate "http://enlacertn.sar.gob.hn"
    IE.Visible = True
   While IE.busy
    DoEvents
   Wend
   IE.document.All.Item("txtCriterio").Value = RTN
   IE.document.All("btnBuscar").Click
   Application.Wait (Now + TimeValue("0:00:03"))

   Do Until IE.ReadyState = 4
    DoEvents
   Loop
   Respuesta = IE.document.getElementById("LblNombre").innertext
   Registro = Respuesta
  IE.Quit
End Function

я нуждаюсь в том, чтобы извлечь составную часть Id=LblNombre, но я devulve ошибка функция

Я присоединяю образы для большего понимания

Excel Error

Antes dela consulta

Despues de la consulta

codigo de la pagina web

Если они такие любезные показывания меня, где у меня есть ошибка в формуле и шага объясняться немного, как он был бы кодом, чтобы изучать.

Спасибо!

2
задан 21.05.2019, 22:36
1 ответ

Говорится о проблеме времен. Она funciГіn Application. Wait не estГЎ принося пользу Ваша работа, потому что оно только функционирует, когда она названа с Sub/Macro. Смоги быть в одной funciГіn, но если ты называешь эту с ячейки в форме =Registro (A1) или с VBA (Выполнять или F5) Application. Wait не realizarГЎ ningГєn тип delay, по крайней мере запрограммированного, потому что lГіgicamente механизм Excel должен обрабатывать ее и это занимает время ( миллисекунд ). Он состоит fГЎcil в том, чтобы подтверждать это, если мы выполняем в Sub и в Function следующего cГіdigo:

MsgBox Application.Wait(Now + TimeValue("00:00:05"))

DevolverГЎ Verdadero и Фальшивые соответственно. Application. Wait funcionarГЎ хорошо, всякий раз когда estГ© внутри Sub/Macro (Sub и Макрос - точно то же самое), или когда, если estГЎ в одной funciГіn, она была названа с Sub/Macro.

Ввиду этого производит ошибку, когда мы прибываем в них lГ-neas:

IE.document.All("btnBuscar").Click
Application.Wait (Now + TimeValue("0:00:03"))

, Так как, выполнив .Click , мы были бы должны надеяться на то, что сервер находит информацию и показан в браузере. С правильным delay, .Click возвращает верно стоимость и следовательно она funciГіn tambiГ©n.

, Хотя это .Wait estГ© решенный podrГ, - чтобы происходить, и он в самом деле происходит с достаточно частотой, которая она lГ-nea:

    Set IE = CreateObject("InternetExplorer.Application")

произвел ошибку из-за того, что не мог создавать объект и следовательно funciГіn он возвратил бы нам #ВЎVALOR! . В этом случае уже это не проблема delays и чтобы решать utlilizaremos Он Эррор Goto вместе со счетчиком, чтобы предотвращать закрытый цикл.

cГіdigo следующий функционирует верно, хотя возможно, что быть нужный налаживать времена. Также не надо, чтобы IE.Visible это было True .
, И если выходит знаменитость #ВЎVALOR! нужно вновь выполнять ее funciГіn, так как безопасный, что по вине IE или Delays.

Public Function Registro(RTN As String) As String
On Error GoTo otra

Dim IE As Object
Dim v_Time As Date
Dim v_ErrorCount As Integer
v_ErrorCount = 0
    'Delay incorrecto si no se llama desde Sub
    'Application.Wait (Now + TimeValue("00:00:02"))

otra:
    If v_ErrorCount > 2 Then    'Se puede aumentar el margen
        Registro = "Error en Set IE"
        Exit Function
    End If
    v_ErrorCount = v_ErrorCount + 1
    Set IE = CreateObject("InternetExplorer.Application")
    IE.Navigate "http://enlacertn.sar.gob.hn"
    IE.Visible = False

    While IE.busy
        DoEvents
    Wend

    IE.document.All.Item("txtCriterio").Value = RTN
    IE.document.All("btnBuscar").Click
    f_Delay "00:00:03" 'Si falla mucho cambiar a 4 segundos
    Registro = IE.document.getElementById("LblNombre").innertext
    IE.Quit

    'Línea que muestra los intentos. Se puede eliminar
    MsgBox "Intentos " & v_ErrorCount
End Function

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Private Function f_Delay(ByVal v_Delay As String)
    v_Time = Now
    Do While Now - v_Time < TimeValue(v_Delay)
        DoEvents
    Loop
End Function

, Если мы будем использовать Sub , чтобы звонить в нее funciГіn, помнит что перемещает его информацию RTN как аргумент. Следующие функции прокручивают изображение в окне верно.

Sub s_call2()

    'obj_Cell Almacena número RTN.
    Cells(obj_CellDestino) = Registro(obj_Cell.Value)

End Sub

''''''''''''''''''''''''''''''''''''''''''''''''''''

Public Function Registro(RTN As String) As String

Dim IE As Object
Dim Respuesta As String
Dim v_Time As Date

    Set IE = CreateObject("InternetExplorer.Application")
    IE.Navigate "http://enlacertn.sar.gob.hn"
    IE.Visible = False

    While IE.busy
        DoEvents
    Wend

    Application.Wait (Now + TimeValue("00:00:01"))
    IE.document.All.Item("txtCriterio").Value = RTN
    IE.document.All("btnBuscar").Click
    Application.Wait (Now + TimeValue("00:00:01"))
    Registro = IE.document.getElementById("LblNombre").innertext
    'Application.Wait (Now + TimeValue("00:00:01"))
    IE.Quit
End Function

introducir la descripción de la imagen aquí

2
ответ дан 03.12.2019, 08:41