• ベストアンサー

Selectメソッドが無視される

1時間くらいループさせるvbaなのですが Sheets("シート名").Select を何回も行うのですが、ある程度の時間が経つと無視されるようになります。 シート選択後にセルを探したりするので、該当のシートが無視されるため、実行時エラー91が発生してしまいます。 エラー発生後しょうがないからvbaを終了し、 手動でシートを選択しようとしても画面が固まってることもあります。 長時間VBAを行うとこういう現象が発生するのでしょうか? 内容はサイト上のとあるデータをエクセルシートに書き出しています。 一つのobjIEで何百回もNavigateしています。 エクセル2007です。

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

  • ベストアンサー
  • ap_2
  • ベストアンサー率64% (70/109)
回答No.2

91って、SheetsがNothing返すのかな、、、 シート複製やセル範囲コピーなど「Excelの機能」を使った処理は、シートが重かったり、負荷かかると、不思議なエラーが起きやすいです。Select以外にも、何か心当たりはありませんか? まぁ、Selectは控えた方が良さそうです。僕はWithよりSet派。  Set sh = Sheets("Name")  sh.Cells(1, 1) = "hoge" ↓の2, 11あたりが参考になるかと。 http://officetanaka.net/excel/vba/speed/index.htm >一つのobjIEで何百回もNavigateしています サーバに負荷かけるから、嫌われそうですよね・・・

TTWGAICPBIGD
質問者

お礼

>91って、SheetsがNothing返すのかな、、、 説明不足ですいません。 実は、 Sub test() Dim 行 As Long Sheets("Sheet1").Select 行 = Cells.Find(What:="検索文字", LookAt:=xlWhole).Row End Sub このような作業を行っていたので 実行時エラー91「オブジェクト変数またはWithブロック変数が設定されていません」のエラーが発生していました。 Navigateより、 「Excelの機能」を使った処理と言うのが原因だったようですね。ありがとうございました。

その他の回答 (1)

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.1

Sheets("シート名").Select ではなく With Sheets("シート名") .cells(1,2)・・・ .range("A1")・・・ End With のようにした方が良いかと思います。 >長時間VBAを行うとこういう現象が発生する 内容によりけりかと、2・3時間ぶっ続けでも走りきるのもありますし。 また >一つのobjIEで何百回もNavigateしています 接続先から拒絶されてしまうような気もします。 (この辺は詳しくないので。。。ゴメン)

TTWGAICPBIGD
質問者

お礼

Selectメソッドはあまり使わない方が良いようですね。ありがとうございました。

関連するQ&A