- ベストアンサー
Selectメソッドが無視される
1時間くらいループさせるvbaなのですが Sheets("シート名").Select を何回も行うのですが、ある程度の時間が経つと無視されるようになります。 シート選択後にセルを探したりするので、該当のシートが無視されるため、実行時エラー91が発生してしまいます。 エラー発生後しょうがないからvbaを終了し、 手動でシートを選択しようとしても画面が固まってることもあります。 長時間VBAを行うとこういう現象が発生するのでしょうか? 内容はサイト上のとあるデータをエクセルシートに書き出しています。 一つのobjIEで何百回もNavigateしています。 エクセル2007です。
- みんなの回答 (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しています サーバに負荷かけるから、嫌われそうですよね・・・
その他の回答 (1)
- nicotinism
- ベストアンサー率70% (1019/1452)
Sheets("シート名").Select ではなく With Sheets("シート名") .cells(1,2)・・・ .range("A1")・・・ End With のようにした方が良いかと思います。 >長時間VBAを行うとこういう現象が発生する 内容によりけりかと、2・3時間ぶっ続けでも走りきるのもありますし。 また >一つのobjIEで何百回もNavigateしています 接続先から拒絶されてしまうような気もします。 (この辺は詳しくないので。。。ゴメン)
お礼
Selectメソッドはあまり使わない方が良いようですね。ありがとうございました。
お礼
>91って、SheetsがNothing返すのかな、、、 説明不足ですいません。 実は、 Sub test() Dim 行 As Long Sheets("Sheet1").Select 行 = Cells.Find(What:="検索文字", LookAt:=xlWhole).Row End Sub このような作業を行っていたので 実行時エラー91「オブジェクト変数またはWithブロック変数が設定されていません」のエラーが発生していました。 Navigateより、 「Excelの機能」を使った処理と言うのが原因だったようですね。ありがとうございました。