EnjomonWeb

Excel VBAの画像
2024/01/08

Excel VBA 新規ブックを作成しマクロが登録されたボタンを設置する方法 | OnAction

仕事でVBAを使うことがあり、やりたいことはネットで調べていますが、VBA初心者の私が分かりづらかったものを、初心者でも分かるように説明したいと思います。

効率的なコードが書けていない可能性もありますので、予めご了承ください。

今回はOnActionを使用し、新規ブックを作成しマクロが登録されたボタンを設置する方法を紹介します。

使用ケース

①"ブックを作成する"マクロが登録されたボタンクリックすると、新規ブックが作成される。

(本来、この元ブックに大量のデータがあり、その中から何らかの条件でデータを抽出したりしますが、その点は割愛します。)

②"ブックを閉じる"マクロが登録されたボタンが自動的に生成され、クリックするとブックが閉じる。

②のブックは固定ファイルにして、事前にマクロを組み込んでおく方法もありますが、今回は新規ブックを作成し、そのブックにマクロを組み込む方法を紹介したいと思います。

サンプルコード


Option Explicit

Sub wbclose()
  ActiveWorkbook.Close savechanges:=False
End Sub


Sub ブック作成()

Dim wb As Workbook
Dim shp As Shape


Set wb = Workbooks.Add
Set shp = ActiveSheet.Shapes.AddShape(msoShapeRectangle, 100, 10, 70, 25) 

shp.Select
Selection.Characters.Text = "閉じる"
Selection.OnAction = ThisWorkbook.Name & "!wbclose"
   
With shp.TextFrame
  .HorizontalAlignment = xlCenter
  .VerticalAlignment = xlCenter
End With

Range("A1").Select
End Sub


コード解説

閉じるボタン用マクロ

Option Explicit

Sub wbclose()
  ActiveWorkbook.Close savechanges:=False
End Sub

閉じるボタンに登録するマクロを、大元のマクロとは別のプロシージャで記載します。

アクティブなブックを、保存せずに閉じるコードです。

新規ブック作成し、変数にセット

Set wb = Workbooks.Add 

データの抽出先として新規ブックを生成します。

今回は意味のないものになっていますが、通常は変数にセットしておいた方が色々便利でしょう。

図形を挿入し変数に格納

 Set shp = ActiveSheet.Shapes.AddShape(msoShapeRectangle, 100, 10, 70, 25) 

図形の挿入はShapeオブジェクトのAddShapeメソッドで行います。

AddShapeメソッド

Shapes.AddShape(Type, Left, Top, Width, Height)

サンプルコードは四角形を左から100ポイント、上から10ポイント、幅70ポイント・高さ25ポイントで挿入というコードとなります。

図形にマクロ登録

shp.Select
Selection.Characters.Text = "閉じる"
Selection.OnAction = ThisWorkbook.Name & "!wbclose"

図形に「閉じる」のテキストを入力してから、別プロシージャで登録した"ブックを閉じる"マクロを登録しています。

当初は「With shp・・・」で書いたのですがエラーとなってしまいました。

テキスト調整

With shp.TextFrame
  .HorizontalAlignment = xlCenter
  .VerticalAlignment = xlCenter
End With

図形のテキスト操作は、TextFrameで行います。

HorizontalAlignmentが水平方向、VerticalAlignmentが垂直方向の表示位置となり、xlCenterで中央揃えにしています。

以上、新規ブックを作成しマクロが登録されたボタンを設置する方法でした。

データの抽出先を新規ブックにすること自体がそこまで多くはないと思いますが、知っておいて損はない応用編マクロではないでしょうか!

Excel VBAの画像

ユーザーフォームを使用した入力フォームの作り方

Excel VBAの画像

週ごとに縦に並んだ表を横並びにする方法 | Find&Set

Excel VBAの画像

セルに入力された日付を取得し自動でシートとファイルを作る方法

Excel VBAの画像

検索窓にキーワードを入力しEnterキーで検索するフォームの作り方 | Intersect

Excel VBAの画像

ブックを開いた時のウィンドウサイズを指定する方法 | workbook_open

Excel VBAの画像

新規ブックを作成しマクロが登録されたボタンを設置する方法 | OnAction

Excel VBAの画像

複数のワークシートをまとめて表示・非表示にする方法 | Visible Not.Visible

Excel VBAの画像

セル位置が変わっても特定の範囲を選択する方法 | Find&Address

Excel VBAの画像

電話番号からハイフンを削除し0から表示させる方法 | Evaluate&Replace

Excel VBAの画像

ダイアログボックスからファイルを選択して開く | GetOpenFilename

About

EnjomonWebは、「えんじょもん」である元転勤族の管理人が石川県金沢市から発信する、WEB制作情報をメインとした情報発信サイトです。

コーディング習得過程で検索してもすぐに解決しなかったことや、初心者には分かりづらい内容を分かりやすく説明することができるサイトを目指しています。

※「えんじょもん」とは金沢弁で「遠方の人、県外出身の人」という意味の方言。