- ベストアンサー
実行時エラー7 メモリが不足しています。
vbaでie操作をしていて、ループしているのですが strURL = objIE.Document.body.innerHTML の部分で、 「実行時エラー7 メモリが不足しています。」 と言うエラーで一時中止になりますが、 そのままF5を押すと、通過できます。 エラーではないのでしょうか? 中断すると治るエラーなのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 > strURL = objIE.Document.body.innerHTML strURL という名の変数に格納するのなら、 strURL = objIE.Document.url とか strURL = objIE.LocationURL という事がしたいのかな?と迷う面もありますが、 取得したいのは.body.innerHTMLということでお応えします。 > 「実行時エラー7 > メモリが不足しています。」 問題のエラーに関しては、同じシチュエーションでは経験したことがありません。 他の場面で遭遇したことがある同様のエラーとしては、解決策として、 Dim strURL As String と文字列型で宣言してあげることでエラーを回避できるケースがあります。 今回は"vba"に関するご質問ということですから、一旦、変数の型宣言を確認してみてください。 もう一点。 これは「想像の解決策」といった程度で確度は低いですが、 objIE.ReadyState が READYSTATE_COMPLETE に変わるタイミングと objIE.Document.ReadyState が "complete" に変わるタイミングにはズレがありますから、 それが原因で、.body.innerHTMLにとんでもない値が格納される場合があったように思います。 > エラーではないのでしょうか? > 中断すると治るエラーなのでしょうか? "中断すると治る"ようなエラーへのアプローチとしては、 タイミングの最適化を図るのは、まあよくあることではあります。 以下、対策例です。 ' ' /// Sub Re8727064() Dim objIE As Object ' SHDocVw.InternetExplorer Dim objDoc As Object ' MSHTML.HTMLDocument Dim strHTML As String Set objIE = CreateObject("InternetExplorer.Application") ' Set objIE = New SHDocVw.InternetExplorer objIE.Visible = True objIE.Navigate "http://okwave.jp/qa/q8727064.html" Do While objIE.Busy Or objIE.ReadyState < 4 DoEvents Loop Set objDoc = objIE.Document Do While objDoc.ReadyState <> "complete" DoEvents Loop strHTML = objIE.Document.body.innerHTML ' ' 処理(strHTML) End Sub ' ' /// 後は、実際にエラーが発生するコードと実際のURLの提示があれば、 より的確なアドバイスが得られるかも知れません。 うまく解決に導けなかったならすみません。
その他の回答 (1)
- misuteriaew
- ベストアンサー率50% (1/2)
型宣言の問題では? strURLがどの宣言でされているか分からないですが、宣言している場合は削除してみたらいいと思います。
お礼
ありがとうございました。
お礼
ありがとうございました。