use*_*963 5 internet-explorer vba internet-explorer-10
使用VBA我可以使用以下内容创建一个包含3个不同选项卡的InternetExplorer对象
Option Explicit
Public Enum IE_READYSTATE
Uninitialised = 0
Loading = 1
Loaded = 2
Interactive = 3
complete = 4
End Enum
Sub Example_Click()
Dim ieApp As clsIE
'Create IE and login
If ieApp Is Nothing Then
Set ieApp = New clsIE
With ieApp
'IE Tab1
.IE.Visible = True
.IE.navigate "http://www.bbc.co.uk/news/"
Do While .IE.Busy Or Not .IE.readyState = IE_READYSTATE.complete: DoEvents: Loop
'IE Tab2
.IE.Navigate2 "http://www.bbc.co.uk", CLng(2048)
Do While .IE.Busy Or Not .IE.readyState = IE_READYSTATE.complete: DoEvents: Loop
'IE Tab3
.IE.Navigate2 "http://www.bbc.co.uk", CLng(2048)
Do While .IE.Busy Or Not .IE.readyState = IE_READYSTATE.complete: DoEvents: Loop
End With
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
我怎样才能访问这些标签....
我知道如何使用单个选项卡而不是多个选项卡执行所有这些操作?
虽然我没有做过严格的测试,但我找到了一个似乎有效的答案.我修改了你的代码,这样我就可以在没有你的clsIE模块的情况下运行它.此代码在打开它们时将标签导航到3个URL,然后使用shellwindows对象将它们导航到新的URL.
我更改了do而.busy ..行,因为它们不适用于第2和第3个选项卡,因为IE applecation的状态已准备好,而新选项卡仍在加载.
Sub Example_Click()
Dim ieApp As InternetExplorer
Dim SWs As ShellWindows
Dim IETab1Number As Integer
Dim IETab2Number As Integer
Dim IETab3Number As Integer
Set SWs = New ShellWindows
'Create IE and login
If ieApp Is Nothing Then
Set ieApp = CreateObject("InternetExplorer.Application")
With ieApp
'IE Tab1
.Visible = True
.Navigate "http://www.bbc.co.uk/news/"
Do While .Busy Or Not .ReadyState = IE_READYSTATE.complete: DoEvents: Loop
IETab1Number = SWs.Count
'IE Tab2
.Navigate2 "http://www.bbc.co.uk/news/uk-scotland-north-east-orkney-shetland-23822420", CLng(2048)
'Do While .Busy Or Not .ReadyState = IE_READYSTATE.complete: DoEvents: Loop
Do While SWs.Count = IETab1Number: DoEvents: Loop
IETab2Number = SWs.Count
'IE Tab3
.Navigate2 "http://www.bbc.co.uk", CLng(2048)
'Do While .Busy Or Not .ReadyState = IE_READYSTATE.complete: DoEvents: Loop
Do While SWs.Count = IETab2Number: DoEvents: Loop
IETab3Number = SWs.Count
'ieApp.Visible = False
SWs.Item(IETab1Number - 1).Navigate "http://www.bbc.co.uk/"
SWs.Item(IETab2Number - 1).Navigate2 "http://www.bbc.co.uk/news/"
SWs.Item(IETab3Number - 1).Navigate2 "http://www.bbc.co.uk/news/"
End With
End If
Set ieApp = Nothing
Set SWs = Nothing
End Sub
Run Code Online (Sandbox Code Playgroud)
它使用ShellWindows来操作选项卡.这只是通过数字来完成的,所以我猜它可能容易出错.
为了使其更加健壮,您可能希望在操作后从选项卡中获取一些信息,并在返回时检查值是否相同.例如sPageTitle = SWs.Item(IETab3Number - 1).Document.Title
,可以用于在选项卡中存储页面标题,下次要使用选项卡时,可以检查它是否未更改.
小智 5
简单的解决方法是将新选项卡重新分配给对象
IE.navigate "http://www.bbc.co.uk/news/", CLng(2048)
Do While IE.Busy Or Not IE.readyState = IE_READYSTATE.complete: DoEvents: Loop
With CreateObject("Shell.Application").Windows
Set IE = .Item(.Count - 1)
End With
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
17279 次 |
最近记录: |