vba的Internet Explorer删除对象
我正在做简单的VBA脚本女巫是要打开IE浏览器,获取一些信息,并退出。 脚本打开IE浏览器35次没有问题,但之后,它工作,但不再打开IE浏览器。
Sub Test() for x=1 to 50 Dim objIE As Object Set objIE = New InternetExplorer Set objIE = New InternetExplorerMedium objIE.Visible = True objIE.Navigate2 "http://www.google.com" objIE.Visible = False Set objIE = Nothing next x End Sub
我并没有真正想要用你的代码做什么,但是这里有一些提示可能有助于解决这个问题:
-
你可以把声明和浏览器都放到循环之外,你不需要声明它并且每次都设置它:
Dim objIE As Object Set objIE = New InternetExplorerMedium
-
为什么你把
objIE
设置为New InternetExplorer
,如果你把它设置成New InternetExplorerMedium
后又是对的? 那个行动是没用的。 -
在
objIE.Navigate2 "http://www.google.com"
和Set objIE = Nothing
你应该等待一段时间,至lessDo While objIE.busy Loop
,因为你甚至不给浏览器时间加载文件,你已经摧毁它。 -
Set objIE = Nothing
也可以放在循环之外,你可以重复使用同一浏览器来浏览尽可能多的链接。 另外,不要忘记先退出它,然后用objIE.quit
从内存中销毁它
如果它工作了35次,并从第36次开始“继续工作,无所事事”,那么当你到达那里时,就会怀疑链接是否被破坏了。 您可以使用每次您要导航的链接上的Debug.Print
进行检查。
这是使用VBA自动化IE的基本结构。
Option Explicit Sub PAO() Dim IE As InternetExplorer Dim url As String Const url$ = "http://www.google.com" Set IE = CreateObject("internetexplorer.application") IE.Visible = True IE.navigate url Set IE = Nothing End Sub
此外,这里有一个Wait
function,可以帮助您等待网页加载。
Function IEWait(t As Long) Do While IE.Busy Application.Wait DateAdd("s", t, Now) Loop End Function
这是你如何使用该function:
IEWait (1) Do Until IE.readyState = READYSTATE_COMPLETE: DoEvents: Loop
希望这会帮助你,但如果你有任何问题,请告诉我。