在Excel VBA执行期间中途重新启动Internet Explorer

时间:2016-08-09 19:07:55

标签: excel vba excel-vba

我正在使用HTML抓取excel工具访问网站并搜索我放在A列(最多300个)中的代码,并将所有相关信息提取到相邻列中。问题是,一个名为iexplore * 32.exe的进程启动并继续占用内存,它占用1.2GB的RAM,直到VBA崩溃。

    Set ie = CreateObject("InternetExplorer.Application")
    With ie
         .Visible = False
          For j = 2 To i  

         .navigate "https://google.com/dp/" & ThisWorkbook.Sheets(1).Cells(j, 1)

         "My code"
         Next j

    End With

    ie.Quit
    Set ie = Nothing

ie.quit似乎没有工作,因为我发现这个过程没有被杀死。有没有办法可以在某个时间间隔内杀死进程,例如j = 50。我可以重新启动IE进程以使程序不会崩溃吗?

1 个答案:

答案 0 :(得分:0)

你是否试图让它可见,以便你知道它是否关闭?

不是将ie定义为对象,而是将其作为" Dim,即作为InternetExplorer"然后使用"设置ie =新的InternetExplorer"。

你在"我的代码"?期间设置ie等于Nothing此外,它没有显示你结束with语句的位置,但是" Quit ie"和"设置ie = Nohting"应该是在结束之后。

dim ie as InternetExplorer

Set ie = new InternetExplorer
With ie
.Visible = False

For j = 2 To i  

.navigate "https://google.com/dp/" & ThisWorkbook.Sheets(1).Cells(j, 1)

 "My code"

 End with

 ie.Quit
 Set ie = Nothing

修改

这可能有点极端,但你可以设置一个Sub,如果其中一个使用超出既定天花板的内存,就会杀死所有IE进程。此解决方案的问题是它将终止正在运行的所有IE进程。在此示例中,它使用20MB作为上限,您可能希望将其提升到250MB或更高。

Sub KillHighestMemIEProcess()

Dim oServ As Object
Dim cProc As Variant
Dim oProc As Object

Set oServ = GetObject("winmgmts:")
Set cProc = oServ.ExecQuery("Select * from Win32_Process")

For Each oProc In cProc

If oProc.Name = "iexplore.exe" And oProc.WorkingSetSize / 2400000 > 20 Then 'greater than the MB ceiling
    Shell ("taskkill /F /IM iexplore.exe /T")
    Exit Sub
End If

Next

End Sub