即効テクニック |
サンプルではVisual Basic Editorのコマンドバーと、各コマンドバーの機能一覧及びFaceを取得し、ActiveSheetに書き出します。
Sub GetVBECommandBarControls() Dim i As Long, j As Long Dim MyCtrl As CommandBarButton '画面描画停止 Application.ScreenUpdating = False On Error Resume Next For i = 1 To Application.VBE.CommandBars.Count 'コマンドバーの主要なプロパティーの値書き出し With Application.VBE.CommandBars(i) Cells(1, i).Value = .Name Cells(2, i).Value = .NameLocal Cells(3, i).Value = "BuiltIn: " & .BuiltIn Cells(4, i).Value = "Context: " & .Context Cells(5, i).Value = "Index: " & .Index Cells(6, i).Value = "Position: " & .Position Cells(7, i).Value = "Protection: " & .Protection Cells(8, i).Value = "RowIndex: " & .RowIndex Cells(9, i).Value = "Type: " & .Type Cells(10, i).Value = "Top: " & .Top For j = 1 To .Controls.Count 'コントロールの主要プロパティーの値書き出し With .Controls(j) Cells((j - 1) * 4 + 11 + 1, i).Value = "Caption:" & .Caption Cells((j - 1) * 4 + 11 + 2, i).Value = "ID: " & .ID Cells((j - 1) * 4 + 11 + 3, i).Value = "Index: " & .Index 'Face取得 If .Type = msoControlButton Then Set MyCtrl = Application.VBE.CommandBars(i).Controls(j) MyCtrl.CopyFace Cells((j - 1) * 4 + 11 + 4, i).Select ActiveSheet.Paste Set MyCtrl = Nothing End If End With Next j End With Next i ActiveSheet.UsedRange.EntireColumn.AutoFit ActiveWindow.ScrollColumn = 1 ActiveWindow.ScrollRow = 1 ActiveWindow.Zoom = 75 Application.ScreenUpdating = True End Sub
※個別にボタンの機能を実行するには・・・ Application.VBE.CommandBars("Project Window Insert") _ .Controls("ユーザー フォーム(&U)").Execute などのようにExecuteメソッドを用います。 ※97と2000ではIndexが異なったり、NameやCaptionのカタカナが97では半角であったりなど、若干扱いが異なる場合があります。Application.Versionで処理分岐を行ったり、IDが同じであることが確認できればFindControlメソッドを使う、などの注意が必要です。