- ベストアンサー
VBAのSheet.copyとsheet.selectについて
For i = 1 To 50 Sheets(1).Select Sheets(2).Copy after:=Sheets(2) Sheets(1).Copy after:=Sheets(2) Next のようにして、Excelの2つのSheetを50セットコピーするとします。しかし、最初の何回かは成功するのですが、時々コピーが失敗したというダイアログが出て止まってしまいます。必ず止まるわけではないので原因が分かりません。 また、似たような理由で、 For x = 1 to 100 Sheets(2 + x).Cells(1, 1).Select With ActiveCell.Characters (Start:=9, Length:=2).Font .ColorIndex = 3 Next End With のように回していると、「Rengeクラスのselectメソッドが失敗しました」というエラーダイアログが出てしまうことがあります。成功する時は成功します。 どなたか教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
前半は下記でよいかと思います。いちいちSELECTするのは無駄なので削除し た方が良いでしょう。恐らく情報量の多いシートをコピーしていて、コピー し終える前に更なるコピーの処理が走る為にエラーとなっているのではない でしょうか?処理間にwaitを入れるとうまくいくかもしれません。 waitはHELPでお調べ下さい。 For i = 1 To 50 Sheets(2).Copy after:=Sheets(2) Sheets(1).Copy after:=Sheets(2) Next 後半ですが、数字等変えてますが下記で動きます。こちらもやはりSELECTの 意味がないように思います。それと、NEXT及びENDWITHの位置が違う為に 「Rengeクラスのselectメソッドが失敗しました」のエラーがでなくとも 別のエラーになると思います。こちらは恐らくフォント色の設定以外にも 実際には他の処理もあるんですよね?無ければWithも必要ないですけど。 Dim x As Long For x = 1 To 2 With Sheets(2 + x).Cells(1, 1).Characters(Start:=9, Length:=2).Font .ColorIndex = 3 End With Next
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
前半だけ 私がやってみると、うまく(とまらず)行きました。 Sheets(1).Select を除いてやってみましたが、動きました。不要では? 報告します。
お礼
回答ありがとうございました。 確かにselect部分は不要そうですね。指摘&再現どうもです。
お礼
回答ありがとうございました。 前半、後半部分の指摘、大変参考になり、無事解決することが出来ました。selectはむやみに使用する必要はないのですね。勉強し直します。