• ベストアンサー

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メソッドが失敗しました」というエラーダイアログが出てしまうことがあります。成功する時は成功します。 どなたか教えてください。

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

  • ベストアンサー
noname#123709
noname#123709
回答No.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

noname#15844
質問者

お礼

回答ありがとうございました。 前半、後半部分の指摘、大変参考になり、無事解決することが出来ました。selectはむやみに使用する必要はないのですね。勉強し直します。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

前半だけ 私がやってみると、うまく(とまらず)行きました。 Sheets(1).Select を除いてやってみましたが、動きました。不要では? 報告します。

noname#15844
質問者

お礼

回答ありがとうございました。 確かにselect部分は不要そうですね。指摘&再現どうもです。

関連するQ&A