このページに含まれるプログラム、ファイル等については、
自分でいろいろマクロを作っていて、ボタンを作るのがめんどくさいことありませんか?
かく言う私もそうなのですが、作った後にいちいちマクロの実行で呼び出すのが面倒くさい。
ボタンを作るのは良いけど、他のパソコンで使うときに使えないとか、新しいマクロを作ったときに
またボタンを作らなくてはいけないのが面倒くさい。そう思いません??
私はこの解決方法として、
Sub MyFuncInit() Const FuncTable As String = "関数表!A1" Const TbarName As String = "MyToolBar" Const TpopName As String = "MyFunc" Const TbtnCap As Integer = 1 Const TbtnAct As Integer = 2 Dim Tbar As CommandBar Dim Tbtn As CommandBarButton Dim r As Range For Each Tbar In Application.CommandBars If Tbar.Name = TbarName Then Tbar.Delete Next Tbar Set Tbar = Application.CommandBars.Add(Name:=TbarName).Controls.Add(Type:=msoControlPopup).CommandBar With Tbar .Parent.Caption = TpopName For Each r In Range(FuncTable).CurrentRegion.Rows Set Tbtn = .Controls.Add(Type:=msoControlButton) With Tbtn .Style = msoButtonCaption .Caption = r.Columns(TbtnCap).Text .OnAction = r.Columns(TbtnAct).Text End With Next r .Parent.Parent.Visible = True End With End Sub
あるマクロを起動するツールボタンを作るマクロ作ったときに、不正終了するたびにツールボタンが増えていってしまうことがありました。押したボタンが今作ったボタンなのか、不正終了したときに出来たボタンなのか調べて、不要なボタンなら削除することを考えて、しばらく関数を探していました。
Option Explicit Public Btn As CommandBarButton 'ボタンの作成 Public Sub Init() Set Btn = CommandBars(1).Controls.Add(msoControlButton) With Btn .OnAction = "Test" .Style = msoButtonCaption .Caption = "Click!" End With End Sub 'ボタンが押されたらそのボタンが現在作ったボタン(btn)かどうか確認する。 Public Sub Test() If isActiveButton(Btn) = False Then MsgBox "アクティブではありませんでした。" '非アクティブ時の処理 End If MsgBox "OK" ' 本来の処理 End Sub 'ボタンの重複チェック。同じボタンだったら、Trueを返す。 'ActivateがTrue(既定)の場合、違うボタンの場合は削除して、現在のボタンをBtnに設定し、 'Btnが存在しない場合も現在のボタンをBtnに設定する。 'Activateが Private Function isActiveButton(Btn As CommandBarButton, Optional Activate As Boolean = True) As Boolean Dim ActBtn As CommandBarButton Set ActBtn = CommandBars.ActionControl If Not Btn Is Nothing Then If Not (Btn.Parent.Index = ActBtn.Parent.Index And Btn.Index = ActBtn.Index) Then If Activate Then Btn.Delete Set Btn = ActBtn End If isActiveButton = False Else isActiveButton = True End If Else If Activate Then Set Btn = ActBtn isActiveButton = False End If End Function
' 関数名:OpenFileFolder ' 引数: なし ' 説明: 現在使用しているファイルのあるフォルダをExplorerで開きます。 ' Sub OpenFileFolder() Shell "explorer.exe """ & ActiveWorkbook.Path & """", vbNormalFocus End Sub