私はメモリとメモリ リークの問題を扱った経験があまりありません (またはまったくありません) が、それがここで起こっていることのようです。
私はしなければならないExcelマクロを持っています
-ワークシートのセルからハイパーリンクをたどります
-Webページから情報を取得
します-情報に対していくつかの文字列操作を実行します-取得
した情報でシートのセルを埋めます
私のコードはおおよそ次のとおりです。
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 (!) 行を超えていることを考えると、なぜそれが問題なのかがわかります。
何か助けはありますか?(私はメモリの扱いについてまったく何も知らないと正しく仮定してください)