我有这段代码,基本上应该从网站上依次单击几个按钮。
For Each Element In Ie.getElementsByTagName("a")
If Element.innerText = "Advanced Search" Then
'Debug.Print element.innerText
'**element.Click**
Exit For
Else
End If
Next Element
Set objShell2 = CreateObject("Shell.Application")
IE_count = objShell2.Windows.Count
For X = 0 To (IE_count - 1)
On Error Resume Next
my_url = objShell2.Windows(X).Document.Location
my_title = objShell2.Windows(X).Document.Title
MsgBox ("The title of this page is: " & my_title)
If my_title Like "Client List Management" & "*" Then
Set ie2 = objShell2.Windows(X).Document
my_title3 = ie2.Title
MsgBox ("The title of Client List Management is: " & my_title3)
Exit For
Else
End If
Next
For Each Element In ie2.getElementsByTagName("a")
If Element.innerText = "Accounts" Then
'Debug.Print element.innerText
'**element.Click**
Exit For
Else
End If
Next
For Each Element In ie2.getElementsByTagName("a")
If Element.innerText = "SEARCH" Then
'Debug.Print element.innerText
'**element.Click**
Exit For
Else
End If
Next
For Each Element In ie2.getElementsByTagName("a")
If Element.innerText = "BATCH EXPORT" Then
'Debug.Print element.innerText
'**element.Click**
Exit For
Else
End If
Next
问题是,当我运行整个宏时,仅单击了第一个按钮(按钮“高级搜索”),而在单击“高级搜索”按钮后应单击的其他按钮都没有反应。
但是,当我尝试调试代码并进入程序的每一步时,都会单击应单击的每个按钮。首次亮相时,一切正常。唯一的问题在于程序实际上自己运行时。
您知道如何解决此问题吗?
谢谢:)
答案 0 :(得分:2)
如果计时是一个问题,那么您可以等待Internet Explorer不忙并且readystate
等于4。
尝试将While Ie.readyState <> 4 Or Ie.Busy: DoEvents: Wend
放在可能正在加载页面的部分中。 (导航后,单击按钮等)。
如果所有人都说这还不够,那么您可以随时使用sleep API。
#If VBA7 And Win64 Then
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#Else
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If
仅当您无法等待上面的工作时,我才会这样做。
就绪状态4 表示已发送请求,服务器已完成返回响应,浏览器已完成了响应内容的下载。
来自Microsofts Documentation的忙碌被描述为:
获取一个值,该值指示对象是从事导航还是下载操作。