• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA シートをコピー後、ボタンにマクロ登録)

VBAシートをコピー後、ボタンにマクロ登録

このQ&Aのポイント
  • VBAを使用してExcel2003でシートを別ブックにコピーし、ボタンにマクロを登録する方法について詳しく教えてください。
  • コピーしたシートのボタンを選択し、マクロを登録しなおそうとするとエラーが表示されてしまいます。どのように修正すれば良いでしょうか。
  • コピー先のブックにおいて、ボタンのOnActionプロパティを設定する際にエラーが表示されます。この問題を解決する方法を教えてください。

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

  • ベストアンサー
回答No.2

こんにちは。 そのようなコードは書いたことがありませんし、きちんと考えたことがありませんでしたが、 コードをよく観ると >StaticBOOK.Name & "!Sheet2.保存_Click" このSheet2 は、オブジェクト名ですから、ただしく、Sheet2であればよいのですが、そうでない可能性が高いです。もちろん、シートに一意のオブジェクト名をつければよいはずですが、コピーをされるシートですから、名前付け管理していくのは面倒だと思います。それより、システム側のオブジェクト名を取るほうが早いと思います。例えば、このようなスタイルになるのではないでしょうか。 以下の .CodeName というのが、シートのオブジェクト名になります。 '// Sub Test1()   Workbooks("Origine.xls").Activate '元のシートをアクティブにする   ActiveWorkbook.Worksheets("Sheet2").Copy Before:=Workbooks("Destin.xls").Sheets(1)      With ActiveSheet    .Shapes("Button 1").OnAction = .Parent.Name & "!" & .CodeName & ".保存_Click"   End With End Sub '//

satoron666
質問者

お礼

回答ありがとうございました! 解決いたしました^^ どうしても上手く行かない…と思い 出来たシートに手入力でマクロ登録をし、 その部分をマクロ記録してみて、 フルパスや、設定の違いを確認してみました。 確認したところ、 ブック名の両側に '' が必要なことが判明しました。 なので、 .Shapes("Button 1").OnAction = "'"&.Parent.Name & "'!" & .CodeName & ".保存_Click" というコードに書き換えたところ上手く動作してくれました^^ ありがとうございました!

その他の回答 (1)

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.1

型宣言をした変数(StaticBook)に 現在アクティブなブック(ActiveWorkbook)をセットする必要があります Sub マクロの再登録() '型宣言 Dim StaticBook As Workbook '宣言したWorkbook変数にアクティブブックをセットします Set StaticBook = ActiveWorkbook 'StaticBookのアクティブシートに対しての処理 With StaticBook.ActiveSheet .Shapes("Button 1").Select Selection.OnAction = StaticBook.Name & "!Sheet2.保存_Click" .Shapes("Button 2").Select Selection.OnAction = StaticBook.Name & "!Sheet2.再編集_Click" .Range("A1").Select End With End Sub

satoron666
質問者

お礼

回答ありがとうございました! 解決いたしました^^

satoron666
質問者

補足

回答ありがとうございます。 元々,workbookとして設定し、 ブック名も設定してあり使えているのですが、 再度、ActiveWorkbookとして定義しなおさなければ ならないのでしょうか? 実行してみたところ、上手く行きませんでした。 どうしても、同じようにエラーになっていまいます… コピーした後のシートは、Sheet2とは限らないみたいで、 元々Sheet1~3は作成されていることがあり、 4以上も作成されている可能性があります。 試してみたところ、私の場合だと コピー先にはSheet1,2,3が既にアリ、 コピーした後はSheet4(シート名)という設定になっていました。 このオブジェクト名?は取得できないのでしょうか…

関連するQ&A