在Excelmacros可能的内存泄漏从大量的网页获取信息

我没有太多(或任何)处理内存和内存泄漏问题的经验,但看起来就是这里发生的事情。

我有一个Excelmacros必须
– 遵循工作表中单元格的超链接
– 从网页获取信息
– 对信息进行一些string操作
– 用获得的信息填充工作表中的单元格

我的代码大致是:

Sub GetInfo() Dim numRow As Long numRow = Range("E2").Value Do While WorksheetFunction.IsText(Range("D" & numRow)) If Not Range("D" & numRow).EntireRow.Hidden Then URL = Range("D" & numRow).Hyperlinks(1).Address Set IE = CreateObject("InternetExplorer.Application") IE.Visible = True IE.Navigate URL Do While IE.Busy Application.Wait DateAdd("s", 1, Now) Loop If IE.document.GetElementsByName("thing1").Length = 0 Then strFrame = "Unknown" strBasket = "" strBoxName = "Check Manually" strStartIt = "" strEndIt = "" Else strFruitwork = IE.document.GetElementsByName("thing1")(0).innerText If InStr(strFruitwork, "FRUITY") Then strFruit = "Cherry" numStart = InStr(strFruitwork, "ir:") + 3 numEnd = InStr(numStart, strFruitwork, " -") strBasket = Mid(strFruitwork, numStart, numEnd - numStart) numStart = InStr(strFruitwork, "ane:") + 4 numEnd = InStr(numStart, strFruitwork, " -") strBoxName = Mid(strFruitwork, numStart, numEnd - numStart) numStart = InStr(strFruitwork, "ey:") + 3 numEnd = Len(strFruitwork) strStartIt = Mid(strFruitwork, numStart, numEnd - numStart) strEndIt = "NA" Else strFruit = "Berry" allPropBoxes = IE.document.GetElementsByName("_.properties") For PropBox = 0 To IE.document.GetElementsByName("_.properties").Length strFruitInfo = IE.document.GetElementsByName("_.properties")(PropBox).innerText If (InStr(strFruitInfo, "yaddayadda") <> 0) Then Exit For End If Next numStart = InStr(strFruitInfo, "Name:") + 11 numEnd = InStr(numStart, strFruitInfo, Chr(10)) strBoxName = Mid(strFruitInfo, numStart, numEnd - numStart) numStart = InStr(strFruitInfo, "BegNum:") + 15 numEnd = InStr(numStart, strFruitInfo, Chr(10)) strStartIt = Mid(strFruitInfo, numStart, numEnd - numStart) numStart = InStr(strFruitInfo, "EndNum:") + 13 numEnd = InStr(numStart, strFruitInfo, Chr(10)) strEndIt = Mid(strFruitInfo, numStart, numEnd - numStart) numStart = InStr(strFruitInfo, "Basket:") + 5 strBasket = Mid(strFruitInfo, numStart, Len(strFruitInfo) - numStart) End If End If Range("F" & numRow).Value = strFruit Range("G" & numRow).Value = strBasket Range("H" & numRow).Value = strBoxName Range("I" & numRow).Value = strStartIt Range("J" & numRow).Value = strEndIt IE.Quit Set IE = Nothing Set strFruit = Nothing Set strFruitwork = Nothing Set strBasket = Nothing Set strBoxName = Nothing Set strStartIt = Nothing Set strEndIt = Nothing Set numStart = Nothing Set numEnd = Nothing Set strFruitInfo = Nothing Set allPropBoxes = Nothing Set PropBox = Nothing Set URL = Nothing End If numRow = numRow + 1 Loop End Sub 

我会假设 set = nothings应该照顾内存问题,但在实际操作中,脚本一次最多只能工作3-4行,在卡住之前(macros被卡在IE窗口打开,但没有input/跟随URL)。 手动closuresIE窗口,然后再次启动脚本使其工作正常,但只有3行。 鉴于我的数据超过900(!)行,你可以得到为什么这是一个问题。

任何帮助? (请正确地假设我对处理内存事物一无所知)

只是一个想法。 我知道会有很多工作,但考虑做一个单一的

 Set IE = CreateObject("InternetExplorer.Application") 

然后发出多个IE.Navigate URL您的行的IE.Navigate URL 。 打开浏览器是一个相当繁重的过程相比,只是去一个url,并可能解决/减轻你的问题。