- ベストアンサー
アドインで追加したツールバーのコマンドボタンの制限方法について
- ExcelのVBAで作成したプログラムにアドインで追加したツールバーのコマンドボタンをユーザーが修正や削除することを制限する方法について教えてください。
- フリーソフトなどを見ると、コマンドボタンが変更されても再立ち上げすると元の状態に戻るようですが、それを実現する方法を知りたいです。
- 配布やメンテナンスを考慮して、障害の可能性を最小限に抑えたいので、経験のある方にアドバイスをお願いします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
そのコマンドバーは手作業で作成して回ったのですか?・・・(^_^;; VBAが書けるのならCommandBarもVBAで作れますよ。 私が作ったxlaファイルのサンプルです。 xlaファイルのThisWorkbookモジュールに記述します。 ただし、見易さを考慮して各行先頭の空白は全角スペースにしています。 ポイントは以下の2点。 ・コマンドバーを作成するときに「Temporary:=True」を指定する。 これにより、コマンドバーがユーザーのPCに作成されず、Excelを閉じると削除されます。 ・ThisWorkbookを閉じるときにコマンドバーを削除する。 これによりアドインのチェックを外した瞬間にコマンドバーも削除されます。 ----------------------------------- Option Explicit Private Const cmstrBAR_NAME As String = "テストバー" ' *********************************************** ' ブック起動 コマンドバーを作成する。 ' *********************************************** Private Sub Workbook_Open() Dim myCmdBar As CommandBar Dim myCmdBarBtn As CommandBarButton If CmdBarExis = False Then Set myCmdBar = Application.CommandBars.Add(Name:=cmstrBAR_NAME, Temporary:=True) Set myCmdBarBtn = myCmdBar.Controls.Add(Type:=msoControlButton) With myCmdBarBtn .Caption = "入力" .DescriptionText = "入力用フォームを表示する" .TooltipText = "入力用フォームを表示します" .Style = msoButtonCaption .OnAction = "ShowEntryForm" End With Set myCmdBarBtn = myCmdBar.Controls.Add(Type:=msoControlButton) With myCmdBarBtn .Caption = "集計" .DescriptionText = "月度集計を開始する" .TooltipText = "今月の集計を開始します" .Style = msoButtonCaption .OnAction = "LetCalc" End With myCmdBar.Visible = True Set myCmdBarBtn = Nothing Set myCmdBar = Nothing End If End Sub ' *********************************************** ' ブックを閉じる コマンドバーを削除する ' *********************************************** Private Sub Workbook_BeforeClose(Cancel As Boolean) If CmdBarExis = True Then Application.CommandBars(cmstrBAR_NAME).Delete End If End Sub ' *********************************************** ' ブック アクティブ時 コマンドバーを表示する ' *********************************************** Private Sub Workbook_Activate() If CmdBarExis = True Then Application.CommandBars(cmstrBAR_NAME).Enabled = True Application.CommandBars(cmstrBAR_NAME).Visible = True End If End Sub ' *********************************************** ' コマンドバーを隠す ' *********************************************** Private Sub Workbook_Deactivate() If CmdBarExis = True Then Application.CommandBars(cmstrBAR_NAME).Enabled = False Application.CommandBars(cmstrBAR_NAME).Visible = False End If End Sub ' *********************************************** ' このアドインで作成したCommandBarがすでに ' 存在するかチェックする。 ' 戻り: 存在する = True, 存在しない = False ' *********************************************** Private Function CmdBarExis() As Boolean Dim Bar As CommandBar For Each Bar In Application.CommandBars If Bar.Name = cmstrBAR_NAME Then CmdBarExis = True Exit Function End If Next Bar End Function -----------------------------------
お礼
有り難う御座います。 早速試したいと思います。
補足
テストしました。 goodです。 補足ですが、ボタンにイメージ図を表示させようと思っています。FaceIdを使うつもりですが、ちょっと行き詰まって再度OKWEBに質問を出しました。 有り難う御座いました。