我正在使用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进程以使程序不会崩溃吗?
答案 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