アプリ版:「スタンプのみでお礼する」機能のリリースについて

vbaでie操作をしていて、ループしているのですが

strURL = objIE.Document.body.innerHTML
の部分で、

「実行時エラー7
メモリが不足しています。」

と言うエラーで一時中止になりますが、
そのままF5を押すと、通過できます。

エラーではないのでしょうか?
中断すると治るエラーなのでしょうか?

A 回答 (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://oshiete.goo.ne.jp/qa/8727064.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の提示があれば、
より的確なアドバイスが得られるかも知れません。

うまく解決に導けなかったならすみません。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2014/09/07 16:20

型宣言の問題では?



strURLがどの宣言でされているか分からないですが、宣言している場合は削除してみたらいいと思います。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2014/09/07 16:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています