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

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

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

お世話になっております。 Excel2003を使用しております。 分かる人にはすぐ分かる問題かもしれませんが、 良くわからないため教えて下さい。 シートを別ブックにコピーします。(ここまでは出来ています。) 元々あったボタンを選択し、 マクロを登録しなおそうとするも、上手く行かず… Dim StaticBook as Workbook と宣言し、 コピー先のブックを選別?できるようにしています。 そのため、シートをコピーした後に 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 としてみたのですが、エラーが表示されます。 Buttonクラスの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

  • VBAで別のExcelブックのボタンのマクロ登録

    Excelブック1とExcelブック2があります。 Excelブック1はVBAで 1)Excelブック2を開いて 2)Excelブック1のワークシート(Sheet1)と  モジュールシート(Module1)を  Excelブック2にコピーします。 3)ワークシート(Sheet1)にはコントロール(ボタン)が貼り付けてあって  このボタンをクリックするとモジュールシート(Module1)の中の  Excute_Button()というプロシージャ(マクロ)を呼び出すため  Excelブック1のVBAで  wb.Worksheets("Sheet1").Shapes.Range(Array("Button 1")).Select  Selection.OnAction = "Excute_Button"  と記述してボタンのマクロの登録をします。   (wbはExcelブック2を指しています) 4)Excelブック2を保存して閉じる。 という処理をしています。 この後、Excelブック1を閉じて、 Excelブック2を開いてワークシート(Sheet1)のボタンをクリックすると Excelブック1が開いてしまいます。 Excelブック2のボタンのマクロの登録のマクロ名を見てみると Excelブック1のファイル名!Excute_Button となっています。 Excelブック1のVBAで、ここを単にExcute_Buttonだけにするには どのようにすればよいでしょうか。

  • セルをコピーしてシート名を取得 【VBA】

    こんばんわ。 エクセルのVBAについて、どうしてもわからなくなったので質問させて下さい。 マクロの内容は 1.一番前のシート(名前はSheet1ではありません。)のボタン35をクリック 2.シートをコピーして3番目に置く。 3.値にする。 4.シート名をセルの"DE16"に入っている値にする。 5.ボタンを消す。 以下の内容になりましたが、名前のところでデバックがおこります。 Sub ボタン35_Click() Worksheets(1).Select Worksheets(1).Copy After:=Sheets(3) Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues Worksheets(3).Select Worksheets(3).Name = Range("DE16").Value ActiveSheet.Shapes("Button 11").Select Selection.Delete Application.CutCopyMode = False End Sub どなたかお知恵を貸して下さい。

  • マクロの実行ボタンを削除するマクロ

    以下のようなコードを書いたのですが シート内にボタンができてそのボタンを最終的には削除したいです 資料作成のテンプレートとして下記コードを書いたのですが 資料ができた時にボタンがあるままだと見栄えがいまいちなのでマクロ実行ボタンを削除したくなりました。 シート数は30枚くらいあるので1シートずつマクロ実行ボタンを削除するのは正直しんどいです 一度にシートを全部選択してマクロ実行ボタンを削除したいです マクロ実行ボタンの箇所は全シート同じ箇所にあります Sub ボタン() Selection.Borders(xlEdgeBottom).LineStyle = xlNone Selection.Borders(xlEdgeRight).LineStyle = xlNone Selection.Borders(xlInsideVertical).LineStyle = xlNone Selection.Borders(xlInsideHorizontal).LineStyle = xlNone ActiveSheet.Buttons.Add(108, 40, 55, 15).Select Selection.OnAction = "図形挿入等倍" Selection.Characters.Text = "図形挿入" With Selection.Characters(Start:=1, Length:=4).Font .Name = "MS Pゴシック" .FontStyle = "標準" .Size = 11 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = 1 End With Range("E4").Select ActiveSheet.Buttons.Add(215, 40, 55, 15).Select Selection.OnAction = "赤枠" Selection.Characters.Text = "赤枠" With Selection.Characters(Start:=1, Length:=2).Font .Name = "MS Pゴシック" .FontStyle = "標準" .Size = 11 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = 1 End With Range("G4").Select ActiveSheet.Buttons.Add(323, 40, 55, 15).Select Selection.OnAction = "テキスト入り赤四角" Selection.Characters.Text = "テキスト" With Selection.Characters(Start:=1, Length:=4).Font .Name = "MS Pゴシック" .FontStyle = "標準" .Size = 11 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = 1 End With Rows("12:12").Select ActiveWindow.FreezePanes = True End Sub

  • マクロ ボタンに名前をつける

    ☆シート1にボタンが29個あり、 ボタンを押すとシート2やシート3のページをアクティブにして表示するマクロを作っています。 その過程で、シート1にボタンを29個作成するところまでは終わりました。 そして、次にボタン1つ1つに名前を付けたいと思うのですが、 シート2、3、4...のI2のテキストを引用してボタンの名前を付けたいです。 (各シートのタイトルはI2に記入しているため。) シート2のI2のテキストを引用してボタンに名前を付けるマクロを作ってみましたが、 ”広告事業収入”がシート2だとは限らないので、”広告事業収入”を引用せず、 ”シート2のI2”を引用してボタンの名前にするマクロにしていただきたいです。 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ Sub シート2のボタン作成() ' Sheets(2).Select Range("I2").Select ActiveCell.FormulaR1C1 = "広告事業収入" Sheets(1).Select ActiveSheet.Shapes.Range(Array("Button 1")).Select Selection.Characters.Text = "広告事業収入" With Selection.Characters(Start:=1, Length:=9).Font .Name = "MS Pゴシック" .FontStyle = "標準" .Size = 11 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = xlAutomatic End With End Sub ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ いらない部分も削除していただけたら幸いです。

  • VBAでシートのコピー

    お世話になっております。 VBAの未熟者ですが、個人の資料作成のためのシステムをコツコツと作っております。 今までマクロでシートのコピーをやっていたのですが、コマンドボタンでできるように変更しようとしてうまくいきません。 ファイルAの中にある幾つかのシートの内、シート「個人事業」を「請求書」ファイルの「Sheet2」にコピーしたいのです。その後名前を変更しています。 マクロのプログラムをそのままコピーしてみたのですが、[sheets("個人事業").paste]のところでエラーが出ます。 マクロとコマンドボタンではやはり設定を変更しないといけないのでしょうか?ご教授お願いします。 Private Sub CommandButton1_Click() Sheets("Sheet2").Select Windows("未請求リスト.XLS").Activate Sheets("個人事業").Select Selection.Copy Windows("請求書.xls").Activate Sheets("Sheet2").Select Sheets("個人事業").Paste Sheets("Sheet2").Name = "個人事業請求一覧" Sheets("請求書").Select End Sub 宜しくお願いします。

  • VBA 他のブックから図形にマクロを登録するマクロ

    別のブックから複数あるブックを開いてボタンを作りマクロを登録し、保存して閉じるということを繰り返したいのですが、ボタンを作るところまではできたのですが、ボタンにマクロを登録する際に下記の="A.xlsm!マクロ名"の部分のAを変数もしくは"\\〇〇\" & .Cells(I, "B") & ".xlsm"のように変更したいのですが、できません。 ご教示頂ければと存じます。何卒宜しくお願い致します。 Sheets("〇〇").Shapes("Button 4").OnAction = "A.xlsm!マクロ名"

  • Excel 2007 マクロ 別ブックのシートをコピーする方法

    Excel 2007 マクロ 別ブックのシートをコピーする方法 別ブックのシートをコピーして アクティブなブックのシートにコピーしたいと思います。 下記マクロを作成しました。 貼り付ける際に、クリップボードに保存するかどうか 聞かれるメッセージが表示されてうまくいきません。 またもっとシンプルな書き方があればアドバイスお願いします。 Sub 取り込み() Dim wb As Workbook Set wb = Workbooks.Open("\") Sheets("Sheet1").Select Cells.Select Selection.Copy ThisWorkbook.Activate ThisWorkbook.Sheets("特定").Select ActiveSheet.Cells(1, 1).Select ActiveSheet.Paste wb.Close End Sub

  • 【VBA】シートのコピー ~ 値に直す

    大変お世話になります。 VBAのコードについてご教示いただけませんでしょうか。 ■やりたいこと -------------------------------------------------------------------------------- (1) 【原紙】Sheetを、同ブック内の新規シートへコピー (2) 新規シートのシート名を、[セル:B5]の値に変更 (3) 新規シートにコピーされてきた数式を値に変更 ■作成してみたコード -------------------------------------------------------------------------------- Sub SheetCopy1() Worksheets("【原紙】Sheet").Copy Before:=Worksheets("【原紙】Sheet") ActiveSheet.Name = Range("B5").Value Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False End Sub -------------------------------------------------------------------------------- 本日初めてVBAに触れた者が、見よう見まねで『■やりたいこと』を並べたコードのため、やはりエラーになってしまいます。 上記は、どこをどう直せばよろしいでしょうか。 もしくは、そもそも間違っておりますでしょうか。 ご教示いただきたく、何卒よろしくお願いいたします。 ◎もし可能でしたら、併せてご教示ください◎ ---------------------------------------------------------------------------- (1)の動作をさせるために、【原紙】Sheetの任意の場所に”ボタン”を設置するのですが、新規シートにもコピーされるため、そのコピー側のボタンを削除できたら…とも考えていますが、そういう動作も可能でしょうか。

  • VBA シート上のボタンクリックしたら実行

    お世話になっております。 シート上に、予定1、予定2…        実際1、実際2… という名前で作成したオートシェイプがあります。 このオートシェイプをクリックしたら、 既にあるオートシェイプ(矢印)を消し、 オートシェイプ(矢印)を作成するというものをしたいと思っています。 -------------------------- Sub Test() Dim TESTShape As Shape Dim i As Long Dim j As Long j = 1 For i = 5 To 64 With ActiveSheet.Range("J" & i) If i Mod 2 = 1 Then '2で割って余りが1なら Set TESTShape = ActiveSheet.Shapes.AddShape( _ msoShapeRectangle, _ Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height) TESTShape.Fill.Visible = msoTrue TESTShape.Select Selection.ShapeRange.Fill.ForeColor.SchemeColor = 41 TESTShape.Name = "予定" & j ' Else Set TESTShape = ActiveSheet.Shapes.AddShape( _ msoShapeRectangle, _ Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height) TESTShape.Name = "実際" & j ' j = j + 1 End If End With Next End Sub -------------------------- 上記プログラムで、シート上にボタンを作成しました。 そのシートに直接プログラムを書き込み? Private Sub 予定1_Click() MsgBox "TEST" End Sub と試してみていますが、オートシェイプから シートプログラム?の実行はできないのでしょうか。 このシートは色んなシートにコピーして使おうと思っているため、 ボタンをおしたら矢印を消したり、追加したりする動作も他のブックにコピーしたいと思っています。 そのためシートに書き込もうとしているのですが、上手く行かず… 根本的に、なにか間違っているかもしれません。 シートに書き込むプログラムをどう書くべきなのかあまり良くわかっておりません…。 シート上のボタンをクリックしたら実行できるのは、 標準モジュールに書き込んだプログラムのみなのでしょうか? 質問がわかりにくく、説明不足の点も多々あるかもしれません。 その場合は、どんどん聞いてください。お願いします。 回答お待ちしております。

  • マクロボタンのシートをコピーしたいのですが。。。

    こんにちは。 たくさんあるファイルを一つのファイルにシート別にまとめるマクロを作成しました。 毎月同じことをするので、マクロボタンを作成したところ、作成したつきのボタンは正常に作動しますが、このシートを新しいBOOKにコピーして翌月分を作成したところ、マクロが消えてしまい、実行されません。 毎月のことなので、いちいち『前月のマクロをコピーして実行』などしないで、このボタンをコピーすればあとは押すだけ♪なんていう風にうまくいかないものでしょうか? かなり初心者な者で、上手な説明が出来ず申し訳ございません。 Sub 精算用5月() Dim fs As Variant Dim s As Variant Dim w As Workbook fs = Application.GetOpenFilename(Title:="select xls(s)", MultiSelect:=True) If Not IsArray(fs) Then Exit Sub For Each s In fs Set w = Workbooks.Open(Filename:=s) w.Worksheets(1).Copy after:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count) ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count).Name = Application.Substitute(w.Name, ".xls", "") w.Close savechanges:=False Next Worksheets(1).Range("A1").Formula = "=SUM(" & Worksheets(2).Name & ":" & Worksheets(Worksheets.Count).Name & "!A1)" End Sub 上記のマクロでボタンを作成しました。 よろしくお願いいたします。

専門家に質問してみよう