2017-09-02 114 views
0

我正在做简单的vba脚本巫婆是要打开IE浏览器,获取一些信息并退出。脚本打开IE浏览器35次没有问题,但之后,它工作,但不再打开IE浏览器。vba Internet Explorer删除对象

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 
+0

阅读https://en.wikipedia.org/wiki/Graphics_Device_Interface如果你对GDI有什么感兴趣但是我相信GDI对象有限制,你可以打开多少个将取决于IE版本和如果是64位或32位版本。你正在运行最新的IE版本64位?这是从我记忆中的一个问题,我几年前,但它可能仍然有关... – perfo

回答

1

我真的不明白你想与你的代码做什么,但这里一些提示,可能有助于解决问题:

  1. 你可以同时声明和一套您的浏览器圈外的,你不需要声明它每一次设置:

    Dim objIE As Object 
    Set objIE = New InternetExplorerMedium 
    
  2. 你为什么要设置objIENew InternetExplorer,如果你设置后是正确的它又如同New InternetExplorerMedium?这一行动毫无用处。

  3. objIE.Navigate2 "http://www.google.com"之间的Set objIE = Nothing你应该等待一段时间,至少有Do While objIE.busy Loop,因为你甚至不给浏览器加载文档的时候,你已经摧毁它。

  4. Set objIE = Nothing也可以放在循环中,您可以重新使用相同的浏览器来浏览尽可能多的链接。另外,不要忘了与objIE.quit

从内存摧毁它之前先退出它,如果它的工作原理35倍,继续“工作,但什么都不做”,从第36届开始,有关链接难怪被损坏时你到达那里。 您可以在每次您要浏览的链接上检查Debug.Print

0

这是使用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 IEWait(t As Long) 

    Do While IE.Busy 
     Application.Wait DateAdd("s", t, Now) 
    Loop 

End Function 

这是你如何使用功能:

IEWait (1) 
Do Until IE.readyState = READYSTATE_COMPLETE: DoEvents: Loop 

希望这将帮助你,但让我知道如果你有任何问题。

相关问题