- ベストアンサー
エクセルマクロで行をコピーエラーが発生する問題について
- エクセルのマクロを使用してコマンドボタンを作成し、行のコピーを行う際にエラーが発生します。
- RangeクラスのSelectメソッドが失敗し、エラーメッセージ「RangeクラスのSelectメソッドが失敗しました。」が表示されます。
- 原因はRows("1:1").Selectであり、手直しする方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
方法1) >Rows("1:1").Selectが原因みたいです その通りセレクトしているのが直接の原因なので,セレクトしないマクロにします。 private sub CommandButton1_Click() range("20:20").value = worksheets("Sheet1").range("1:1").value end sub 方法2) アクティブXコントロールのコマンドボタンを使用しているので,他のシートがセレクトできないのが原因です。 手順: VBE画面で挿入メニューから標準モジュールを挿入する 標準モジュールにあなたのマクロそのまんま sub macro1() Sheets("Sheet1").Select Rows("1:1").Select Selection.Copy Sheets("Sheet2").Select Rows("20:20").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False end sub と作成する シートにオートシェイプの図形とか「フォーム」コントロールのコマンドボタンを配置,標準モジュールのマクロを登録して利用する。
その他の回答 (1)
- DOUGLAS_
- ベストアンサー率74% (397/534)
回避策は幾通りも考えられますが、 Sheets("Sheet1").Select Rows("1:1").Select Selection.Copy Sheets("Sheet2").Select の4行を Sheets("Sheet1").Rows("1:1").Copy にまとめると、イケルかと存じます。 あるいは、 Rows("1:1").Select を Application.Goto Reference:="R1" にしてもイケます。 #なお、 #Application.CutCopyMode = False #をどこかに入れましょう。 【原因】 >デバックを見るとRows("1:1").Selectが原因みたい エラーが出ているときに、ウォッチウィンドウなりで、 Rows("1:1").Parent.Name の内容を確認してみると、"Sheet2" になっているかと存じます。 一方、Sheet2 をアクティブにした状態で、同じ内容のコードを標準モジュールから起動すると、Rows("1:1").Parent.Name の値は、"Sheet1" になります。 つまり、CommandButton1_Click の方では、Rows("1:1") は、CommandButton1 の貼られているシート=Sheet2 の1行目になるということです。 したがって、Sheet1 がアクティブなっている時点では、非アクティブな Sheet2 の1行目を Select することはできませんので、エラーになります。 http://officetanaka.net/excel/vba/tips/tips125.htm
お礼
ご回答ありがとうございます。 コマンドボタンの説明を詳しく教えて頂きありがとうございます。原因が分かり、コマンドボタンを理解できスッキリしました。 今後ともご指導のほどよろしくお願い致します。
お礼
ご回答ありがとうございます。 方法1)を使わせていただきました。 長々したものを一行にまとめる事が出来て助かりました。 今後ともご指導のほどよろしくお願いします。