dポイントプレゼントキャンペーン実施中!

VB6で作成したAPでエラーで出て困っております。
調べても解決策が見つからず、皆様のお力をお借りしたいと思います。

【環境】
Windows XP SP3
microsoft visual studio 6.0 sp6

【現象】
webbrowserコントロールを利用し、GIFファイルの表示を行う処理で以下のエラーが発生。

実行時エラー '-2(fffffffe)':
オートメーション エラーです

【ソース】

Private GifLoad As Boolean

--------------------------------------------------------------------------------
Private Sub GifFileLoad()
  Dim Hstyl As HTMLStyle
  Dim GifName As String

  GifName = Gifファイルのフルパス

  WebBrowser.Navigate GifName
  GifLoad = False

  '表示を読み込むまで待機
  Do
     DoEvents←ここでエラーが発生
  Loop Until GifLoad

  Set Hstyl = WebBrowser.Document.Body.Style

  With Hstyl
     .OverFlow = "hidden"
      .MarginLeft = "0px"
     .MarginTop = "0px"
  End With

  Set Hstyl = Nothing
End Sub

--------------------------------------------------------------------------------
Private Sub WebBrowser_DocumentComplet(ByVal pDisp As Object,URL As Variant)
  GifLoad = True
End Sub

--------------------------------------------------------------------------------


エラー発生後、メッセージのデバッグボタンでデバッグモードに移行すると、問題なくDoEventsを通り抜けます。単純にResume Naxtを追記したらいいだけのような気もするのですが、エラーの内容、原因が特定できず悩んでいます。

この事象に対して情報をお持ちの方がおられましたら、ご教授お願いいたします。

A 回答 (1件)

自信はありませんが、なんとなく、DoEvents が多重呼び出しされて、おかしくなっているのかな、という気がします。


試しに、次の Sleep 関数を宣言しておいて、
Private Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)

Do
  DoEvents
  Sleep 100
Loop Until GifLoad

のようにしてみるとどうなるでしょうか?


それと、

Set Hstyl = WebBrowser.Document.Body.Style
With Hstyl
  .OverFlow = "hidden"
  .MarginLeft = "0px"
  .MarginTop = "0px"
End With

の部分を

Private Sub WebBrowser_DocumentComplet(ByVal pDisp As Object,URL As Variant)

の中に入れてやれば、Do ~ Loop を使わなくて済むと思うのですが、そうしない理由がなにかあるのでしょうか?

この回答への補足

レスありがとうございます。

WebBrowser_DocumentCompletの中で処理を行わない理由は、前後にも似たような処理を行っており、確実にGifファイルが表示されるまで待機させたいためです。

・Sleep関数を使う方法
ご教授いただきありがとうございます。
現在、試してみたところ、エラーは出ておりません。
ただ、後付で申し訳ないのですが、常にエラーが出るわけではなく、数回~数十回に1回ほどの間隔で発生しております。
今後も注意して検証していこうと思います。


なお、引き続いて「実行時エラー -2」の情報を募集中です。
もし具体的にエラーの内容をご存知の方おられましたら、ご助力お願いします。

補足日時:2011/01/11 19:37
    • good
    • 0
この回答へのお礼

お礼が遅れて申し訳ありません。

とりあえず解決しました。

WebbrowserコントロールはIEの一部Dllを使用しているそうで、
試しにIEを入れなおして見た所正常に動作するようになりました。

違いを比べてみたところ、
Webbrowserコントロールの参照しているDllがshdocvw.dllからieframe.dllに変わっていました。

ちなみに、実行時エラー -2についてですが、
詳しいことはわかりませんでしたが、DoEventsでエラーが発生する度に
「実行時エラー -2」→「実行時エラー -4」→「実行時エラー -6」と値が変わっていきます。
上記の結果から、特に意味のないエラー?ではないかなと思っています。

お礼日時:2011/01/17 21:12

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