Я создаю формулу, которая, когда я пишу число названное 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 ошибка функция
Я присоединяю образы для большего понимания
Если они такие любезные показывания меня, где у меня есть ошибка в формуле и шага объясняться немного, как он был бы кодом, чтобы изучать.
Спасибо!
Говорится о проблеме времен. Она 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