2016-08-09 6 views
0

HTML 스크래핑 엑셀 도구를 사용하여 웹 사이트를 방문하고 열 A (최대 개까지)에 넣은 코드를 검색하고 인접한 열로 모든 관련 정보를 가져옵니다. 문제는 iexplore * 32.exe라는 프로세스가 시작되어 호깅 메모리를 유지하며 VBA가 충돌 할 때까지 1.2GB의 RAM을 차지한다는 것입니다.Excel VBA 실행 중 Internet Explorer를 다시 시작하십시오.

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 does not는 프로세스가 죽지 않는다는 것을 알기 때문에 작동하는 것처럼 보입니다. 특정 간격으로 프로세스를 죽일 수있는 방법이 j = 50이라고 할 수 있습니까? 프로그램이 충돌하지 않도록 IE 프로세스를 다시 시작할 수 있습니까?

+0

'j Mod 50 = 0'이 될 때마다 IE의 새 인스턴스를 설정하는 if 조건을 추가 할 수 있습니다. 나는 그것을 테스트하지 않았지만, 단지 당신에게 가능성을주었습니다 ... 또는 루프의 시작 부분에 매번 IE를 설정하고 루프의 끝 부분에 아무 것도 설정하지 않아도되지만, 그것은 slooooow가 될 것입니다. –

답변

0

닫히는 지 알 수 있도록 표시하려고 했습니까?

개체를 ie로 정의하는 대신 "Dim ie as InternetExplorer"로 "Set ie = new InternetExplorer"를 사용할 수 있습니다.

"내 코드"중에 Nothing과 같게 설정 했습니까? 또한 with 문을 끝내는 위치를 나타내지는 않지만 "Quit ie"및 "Set 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 

편집

이 조금 극단적 일 수 있지만 당신이 그들 중 하나가이 같은 설립 천장 이상의 메모리를 사용하는 경우 단지 모든 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 
+0

그의 문제는 루프 내부를 탐색하는 동안 더 많은 메모리를 사용하기 시작한다는 것입니다. –

+0

그렇습니다. 계속해서 더 해지고 있습니다 ... 50MB부터 시작하여 50 줄로 갈 때마다 1GB를 쳐다보고 1.3GB에 도달하면 충돌합니다. –

+0

@Alex - .Visible = True를 시도했습니다. 창은 닫히지 만 iexplore.exe * 32 작업 관리자에서 계속 볼 수 있습니다. 나는 A 열에 넣은 모든 항목을 반복 한 후 "끝까지 사용"을 사용하고 있습니다. –

관련 문제