• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:実行時エラーが表示されます。)

実行時エラーが表示されます。VBA初心者です。どこを直したらエラーが消えますか?

このQ&Aのポイント
  • 以下のVBAコードを使用すると実行時エラー`91'が表示されます。エラーが消えるように修正するにはどこを直せばよいでしょうか?
  • VBA初心者の方が以下のコードを使用すると実行時エラー`91'が表示されます。エラーが消えるように修正するにはどこを直せばよいでしょうか?
  • VBA初心者の方が以下のコードを使用すると実行時エラー`91'が発生します。エラーを修正するにはどの部分を修正すれば良いですか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

もうすぐ70歳を迎える爺ですので、書かれているコードは全く理解不能。そこで、とにもかくにもExcelにコピペして動かしてみました。すると、添付図のような結果をえました。 【修正箇所】 1、オプションで変数宣言を強要にしたこと。 2、Do-Loop に DoEvents を追加したこと。 3、For-Next のL、Mを追加。 3は特に重要な修正です。この場合のLとMはメモリではなくスタックに記憶され高速で参照される可能性があります。ForループのたんびにドキュメントのDIVクラスのテキスト長を参照するやり方よりちょっとだけエレガントかも知れません。教訓として、Option Explicitをモジュールの先頭に必ずが良いと思います。 なお、動作はしましたが内容はチンプンカンプンです。 Option Explicit Sub テスト()   Dim I As Integer   Dim L As Integer   Dim M As Integer   Dim S As String   Dim obj As Object   Dim targetURL As String      ' ----------------------------------------------   ' IEオブジェクトのセット   ' ----------------------------------------------   Set obj = CreateObject("InternetExplorer.Application.1")   obj.Visible = True      ' ----------------------------------------------   ' 目的のページを開く   ' ----------------------------------------------   targetURL = "http://map.japanpost.jp/pc/syousai.php?id=300197019000"   obj.navigate (targetURL)   ' ----------------------------------------------   ' 読み込み中の待機   ' ----------------------------------------------   Do While obj.Busy     DoEvents   Loop   ' ----------------------------------------------   ' [str_title_hira]のInnerTextの取得   ' ----------------------------------------------   L = obj.Document.All.tags("div").Length - 1   For I = 0 To L     If obj.Document.All.tags("div")(I).classname = "str_title_hira" Then       S = obj.Document.All.tags("div")(I).InnerText       Range("A1") = S     End If   Next L   ' ----------------------------------------------   ' [unit]のInnerTextの取得   ' ----------------------------------------------   M = obj.Document.All.tags("p").Length - 1   For I = 0 To M     If obj.Document.All.tags("p")(I).classname = "unit" Then       S = obj.Document.All.tags("p")(I).InnerText       Range("A3") = S     End If   Next M   ' ----------------------------------------------   ' 終了処理   ' ----------------------------------------------   obj.Quit End Sub

その他の回答 (1)

回答No.1

Dim obj as Object で、objを宣言する必要があります。 「どこに宣言を入れれば良いか?」という初心者的おバカな質問はしないように。