【发布时间】:2018-01-13 00:50:55
【问题描述】:
所以我有这个从网页返回值的函数。问题在于,当我单步运行它时它可以完美运行,但是当我正常运行它时,它会返回另一个值并跳过objIE.Quit。这是代码:
Private Function Mexico(partida As String) As String
partida = Left(partida, 8)
Set objIE = New InternetExplorer
objIE.Visible = True
objIE.navigate "http://www.siicexcaaarem.org.mx/Bases/TIGIE2007.nsf/4caa80bd19d9258006256b050078593c/$searchForm?SearchView"
Cargar
objIE.document.getElementsByName("Query")(0).Value = partida
For Each boton In objIE.document.getElementsByTagName("input")
If boton.Value = "Search" Then
boton.Click
Exit For
End If
Next
Cargar
Application.Wait Now + TimeValue("00:00:03")
Dim temp As String
Dim i As Integer
For Each t In objIE.document.getElementsByTagName("tr")
If t.className = "domino-viewentry" Then
temp = t.Children(8).innerText
End If
Next
If InStr(temp, "*") > 0 Then
temp = Left(temp, Len(temp) - 1)
End If
If InStr(temp, "%") = 0 Then
temp = temp & "%"
End If
Mexico = temp
objIE.Quit
End Function
我正在用这个子测试这个:
Sub Mex()
MsgBox Mexico("33030001")
End Sub
当我单步运行它时,它会返回“15%”并在子程序中传递参数,而当我使用任何给定参数正常运行它时它只返回“%”。知道为什么会这样吗?任何帮助将不胜感激。
注意: objIE 被定义为公共变量,但这并没有给我带来任何不便,因为我还有其他功能可以在不同的网站上正常工作。此外,Cargar 是通常的“等待页面加载完毕”指令。
Private Sub Cargar()
Do Until objIE.Busy = False And objIE.readyState = 4
DoEvents
Loop
End Sub
【问题讨论】:
-
可能是因为您使用的是 application.wait 而不是实际等待网页加载。它可能需要超过 3 秒。您需要将其替换为一个循环来检查以确保网页已完全加载。
-
到@K.Davis 点告诉我们
Cargarsub -
@ScottHoltzman 好点,甚至没有注意到那个子。 OP - 请 edit your post 和
Cargar子作为斯科特指出的那样。 -
你倒退了。您有执行直到它不等于完全加载。你想让你的 Cargar 潜艇说 Do While It's Not Completed Loaded ,因此我提供的潜艇作为答案。
标签: vba excel internet-explorer