こんにちは!AutoCAD VBAの世界へようこそ。
今日は、マクロの記録や単純な図形描画の自動化から一歩進んで、「AutoCADのユーザーインターフェース(UI)そのものをプログラムで支配する」という、極めてエキサイティングな領域にお連れします。
テーマは 【VBAからメニューバーとツールバーを動的にカスタマイズし、カスタムコマンドを登録する】 です。
「業務に合わせて、よく使う独自のコマンドをまとめた専用ツールバーを作りたい」
「担当者ごとに最適なメニュー構成を自動展開したい」
そんな現場の強い要望に対し、手作業のCUI/GUIカスタマイズではなく、VBAコード一発で環境を構築・制御できるようになると、あなたのエンジニアとしての価値は跳ね上がります。
ここをクリアすれば、AutoCAD VBAの基礎はバッチリ。さあ、一緒に本質をマスターしていきましょう!
—
1. AutoCAD UIカスタマイズの本質:CUIXとメニューグループの理解
まず最初に、プロとして知っておくべき「大前提」があります。
現代のAutoCAD(AutoCAD 2010以降)では、メニューやツールバーの情報はすべて CUIXファイル(カスタマイズファイル) というXMLベースのパッケージで管理されています。
VBAからこれらをいじる場合、直接AutoCADのメインCUIXを書き換えるのは御法度です(破損リスクや権限エラーの元になります)。そのため、以下の手順を踏むのが王道かつ安全なアプローチです。
1. メイン(または部分)CUIXから「メニューグループ(MenuGroups)」を取得する
2. そのグループ内に独自の「ツールバー(Toolbars)」や「ポップアップメニュー(Menus)」を動的に生成する
3. そこに「マクロ(カスタムコマンド)」を割り当てた「ボタン(ToolbarItem / MenuItem)」を配置する
このライフサイクルを頭に叩き込んでおけば、どんな複雑なUI変更も怖くありません。
—
2. 実装の全体像:VBAコードの構造
それでは、実際にメニューバーの末尾に独自のポップアップメニューを追加し、さらに専用のツールバーを画面上に展開するコードを見ていきましょう。
以下のコードは、そのままVBAの標準モジュールに貼り付けて実行可能です。
Option Explicit
‘ =================================================================
‘ 模範的プロフェッショナルコード:メニュー&ツールバー動的生成
‘ =================================================================
Public Sub CreateCustomUI()
On Error GoTo ErrorHandler
Dim currMenuGroup As AcadMenuGroup
Dim customMenu As AcadPopupMenu
Dim newMenuItem As AcadPopupMenuItem
Dim customToolbar As AcadToolbar
Dim toolbarBtn As AcadToolbarItem
Dim macroString As String
‘ 1. 現在のメインメニューグループを取得
‘ 通常、AutoCADの基本グループは “ACAD” です。
Set currMenuGroup = ThisDrawing.Application.MenuGroups(“ACAD”)
‘ ————————————————————-
‘ 2. メニューバーへのカスタムメニュー追加
‘ ————————————————————-
‘ メニューバーのポップアップコレクションに新しいメニューを追加
Set customMenu = currMenuGroup.Menus.Add(“業務支援(&B)”)
‘ マクロの定義 (例: 現在の図面情報をイミディエイトに吐き出すVBAプロシージャを呼ぶ)
‘ ※^C^CはAutoCADのキャンセルコマンド、その後にVBAのマクロ名を実行させます
macroString = “^C^C_VBMRUN MyCustomRoutine ”
‘ メニュー項目を追加 (インデックス, 表示名, マクロ文字列)
Set newMenuItem = customMenu.Add(customMenu.Count + 1, “図面チェッカー実行(&C)”, macroString)
‘ AutoCADのメニューバーに表示を反映させる
customMenu.InsertInMenuBar ThisDrawing.Application.MenuBar.Count + 1
‘ ————————————————————-
‘ 3. カスタムツールバーの作成とボタン配置
‘ ————————————————————-
‘ ツールバーコレクションに新しいツールバーを追加
Set customToolbar = currMenuGroup.Toolbars.Add(“業務自動化ツールバー”)
‘ ツールバーにボタンを追加 (インデックス, ボタン名, ツールチップ, マクロ)
Set toolbarBtn = customToolbar.Add(0, “チェッカー”, “図面のエラーチェックを実行します”, macroString)
‘ アイコンの割り当て(必要に応じてリソースを指定。ここでは省略またはデフォルト)
‘ toolbarBtn.SetBitmaps “icon_small.bmp”, “icon_large.bmp”
‘ ツールバーを画面上の指定座標(例: 画面左上あたり)に表示
customToolbar.Visible = True
customToolbar.Dock acToolbarDockTop ‘ 画面上部にドッキングさせる場合
MsgBox “カスタムメニューとツールバーの生成が完了しました!”, vbInformation, “成功”
Exit Sub
ErrorHandler:
MsgBox “エラーが発生しました: ” & Err.Description, vbCritical, “異常終了”
End Sub
‘ =================================================================
‘ 呼び出されるカスタムコマンドの本体
‘ =================================================================
Public Sub MyCustomRoutine()
MsgBox “カスタムメニューからVBAプロシージャが正常に呼び出されました!”, vbInformation, “実行確認”
‘ ここに実際の業務ロジック(画層整理、寸法の自動修正など)を記述します
}
—
3. コードの急所と「ここがプロの技」ポイント
上記のコードには、AutoCAD VBAを極めるための重要なエッセンスが詰まっています。いくつかポイントを解説しましょう。
① マクロ文字列の魔術 (`^C^C_VBMRUN`)
メニューやツールバーのボタンをクリックしたとき、AutoCADは「コマンドラインに文字を入力したのと同じ挙動」をします。
そのため、`^C^C`(強制キャンセル×2回)を挟み、`_VBMRUN` というAutoCADの内部コマンドを使ってVBAのサブルーチン(`MyCustomRoutine`)をキックするのが鉄則です。この作法を忘れると、「コマンド実行中に他のコマンドが割り込んで動かない」という悲劇が起きます。
② メニューバーへのインサート (`InsertInMenuBar`)
メニューアイテムを`Menus.Add`でメモリ上に作っただけでは、画面のメニューバーには現れません。最後に必ず `InsertInMenuBar` メソッドを呼び出し、AutoCADのUIツリーの末尾に結合してあげる必要があります。この一手間を忘れる初学者が非常に多いので注意してください。
③ エラーハンドリングとライフサイクル
すでに同名のメニューやツールバーが存在する状態でこのコードを何度も実行すると、「すでに存在します」という実行時エラー(エラー番号が返る)が発生します。
実務で使うツールを作る際は、事前に既存のメニューを走査して削除(`Delete`メソッド)する「クリーンアップ処理」を冒頭に組み込むのが、プロフェッショナルな設計というものです。
—
4. 陥りやすい罠とトラブルシューティング
最後に、現場でよくあるハマりどころを共有しておきます。
- 「メニューが表示されない!」
→ AutoCADのワークスペース(Workspace)が原因のことがあります。リボンUI主体のワークスペースを使用している場合、古い形式の「メニューバー」が非表示になっている場合があります。AutoCADのコマンドラインに `MENUBAR` と入力し、値を `1` に設定してメニューバーを表示させてみてください。
- 「VBAのセキュリティ警告が出る」
→ マクロを実行する際、信頼できる場所(Trusted Locations)にVBAプロジェクトが含まれていないとブロックされます。オプションの「ファイル」または「セキュリティ」タブから、パスをしっかりと登録しておきましょう。
—
おわりに
いかがでしたでしょうか?
今回は、単なる図形の操作を超えて、AutoCADという巨大なCADプラットフォームのUIをVBAで自在に拡張する方法を解説しました。
ここをクリアしたあなたなら、もはや「マクロの記録をちょっぴり直すだけの初心者」ではありません。ユーザーの作業効率を劇的に改善する「AutoCADアプリケーションエンジニア」の第一歩を踏み出しています。
明日からの業務を効率化する最強のツールバーを、ぜひご自身の環境でも構築してみてください。それでは、次のステップでお会いしましょう!
