解決済みの質問
EXCEL2002で「マクロの記録」を使ってこんなマクロを作りました。
<マクロ>
Sub Macro1()
Sheets("ABC").Select
Sheets("ABC").Copy Before:=Sheets(1)
Cells.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("ABC").Select
Application.CutCopyMode = False
ActiveWindow.SelectedSheets.Delete
End Sub
これをコマンドボタンの押下に組込、こんなサブルーチンにしました。
<サブルーチン>
Private Sub CommandButton3_Click()
Sheets("ABC").Select
Sheets("ABC").Copy Before:=Sheets(1)
Cells.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("ABC").Select
Application.CutCopyMode = False
ActiveWindow.SelectedSheets.Delete
End Sub
これを実行すると4行目のCells.Selectで
実行時エラー'1004'
RangeクラスのSelectメソッドが失敗しました。
となって止まってしまいます。
■■質問■■
なぜでしょう?<マクロ>の方はエラーになりません。
■■追加の質問■■
一方、マクロの方は
選択したシートに、データが存在する可能性があります。データを完全に削除する
には、[削除]をクリックしてください。
となってしまいます。このメッセージを回避する方法ははありますか?
投稿日時 - 2008-04-22 19:03:16
マクロは標準モジュールにあって、サブルーチンのCommandButton3_Clickはシートのモジュールにあるからではないでしょうか?
Sheets(1).Cells.Select
にしてあげればどうでしょうか?
投稿日時 - 2008-04-22 22:18:13
お礼
回答ありがとうございます。
自分で理解せずにマクロをパクッて自動化しているだけのエクセルユーザなので困っていました。
この方法でうまくゆきました。フォーカス(と言うのかどうかわかりませんが)が新しくできた方のシートに移っていたのでこんな問題があるとは思いませんでした。
No.1の方のアドバイスを取り入れて完全自動化ができました。
ありがとうございました。
また、お礼が遅くなってすみませんでした。たった今確認したところです。
投稿日時 - 2008-04-23 22:33:04
0人が「このQ&Aが役に立った」と投票しています
ベストアンサー以外の回答(2件中 1~2件目)
シートを複数処理対象にしているとき
Cells()を使うときは、シートの別(名やインデックス番号)を明示的にはっきりさせないとエラーになります。それと同じ理由と思います。
原則に返って、シート名.Range指定(CellsもRange)とする。
別件だが、Range(Cells(r1, c1), Cells(r2, c2)).Select
の時に(シートを複数処理対象にしているとき)良く失敗する。
投稿日時 - 2008-04-22 23:23:04
お礼
回答ありがとうございます。
内容を理解せずに表面だけまねてVBAを使っているので時々トラブルが発生します。
今後はアドバイスを参考にしたいと思います。
お礼が遅くなってすみませんでした。
投稿日時 - 2008-04-23 22:35:44
OKWaveのオススメ
おすすめリンク