こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

マクロの記録で作ったルーチンが動きません

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

QNo.3967940

困ってます

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

マクロは標準モジュールにあって、サブルーチンのCommandButton3_Clickはシートのモジュールにあるからではないでしょうか?
Sheets(1).Cells.Select
にしてあげればどうでしょうか?

投稿日時 - 2008-04-22 22:18:13

お礼

回答ありがとうございます。

自分で理解せずにマクロをパクッて自動化しているだけのエクセルユーザなので困っていました。

この方法でうまくゆきました。フォーカス(と言うのかどうかわかりませんが)が新しくできた方のシートに移っていたのでこんな問題があるとは思いませんでした。

No.1の方のアドバイスを取り入れて完全自動化ができました。
ありがとうございました。

また、お礼が遅くなってすみませんでした。たった今確認したところです。

投稿日時 - 2008-04-23 22:33:04

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(3)

ANo.3

シートを複数処理対象にしているとき
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

ANo.1

Cells.Selectがエラーになる理由は分かりません。
CommandButton3_Click()の中でMacro1を呼び出すようにしてみては?
警告の抑制は以下のようにします。
Application.DisplayAlerts = False

投稿日時 - 2008-04-22 20:05:59

お礼

回答ありがとうございました。

No.2の方の回答にこれを組み合わせることでうまくゆきました。

お礼が遅くなってすみません。

投稿日時 - 2008-04-23 22:27:55

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-