我没有太多(或任何)处理内存和内存泄漏问题的经验,但似乎这就是这里发生的事情。
我有一个 excel 宏,它必须
- 从工作表中的单元格跟踪超链接
- 从网页获取信息
- 对信息进行一些字符串操作
- 用获得的信息填充工作表中的单元格
我的代码大致是:
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 行,然后才会卡住(宏卡在 IE 窗口打开,但未输入/关注 URL)。手动关闭 IE 窗口,然后再次启动脚本使其正常工作,但再次仅 3 行。鉴于我的数据超过 900(!)行,您可以理解为什么这是一个问题。
有什么帮助吗?(请正确假设我对处理记忆的东西一无所知)