- ベストアンサー
エクセル マクロ一覧
開いているブックにあるマクロの一覧を作れないものでしょうか? モジュール、シート、ユーザーフォーム内にあるマクロすべてです。 VBAのチェックシートとして使いたいのですが エクセルバージョンは2003です
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
NO.2 具体的にどこに出力するかが指示がなかったのでヒントでしたが…。 シートを追加して"A"列に一覧を出力しました。 ご確認ください。 Sub Proc一覧処理() Sheets.Add For Each ブック In Workbooks 行 = 行 + 1: Cells(行, "A") = "ブック名=" & ブック.Name For I = 1 To ブック.VBProject.VBComponents.Count 行 = 行 + 1: Cells(行, "A") = " コンポート名=" & ブック.VBProject.VBComponents(I).Name With ブック.VBProject.VBComponents(I).CodeModule proc = "" For J = 1 To .CountOfLines If proc <> .ProcOfLine(J, 0) Then proc = .ProcOfLine(J, 0) 行 = 行 + 1: Cells(行, "A") = " " & proc End If Next J End With Next I Next Cells.EntireColumn.AutoFit End Sub
その他の回答 (2)
- jcctaira
- ベストアンサー率58% (119/204)
sadacchi12さん こんにちは。 以下の処理でできるかと思います。 注)・変数宣言は省略しています。 ・マクロのセキュリティー設定で 「Visual Basic プロジェクトへのアクセスを信頼する」にチェックをしてください。 Sub Proc一覧処理() For Each ブック In Workbooks モジュール一覧 = モジュール一覧 & "ブック名=" & ブック.Name & vbCrLf For I = 1 To ブック.VBProject.VBComponents.Count モジュール一覧 = モジュール一覧 & " コンポート名=" & ブック.VBProject.VBComponents(I).Name & vbCrLf With ブック.VBProject.VBComponents(I).CodeModule proc = "" For J = 1 To .CountOfLines If proc <> .ProcOfLine(J, 0) Then proc = .ProcOfLine(J, 0) モジュール一覧 = モジュール一覧 & " " & proc & vbCrLf End If Next J End With Next I Next MsgBox モジュール一覧 End Sub
お礼
jcctaira さんもいち早い回答ありがとうございました きれいな形で一覧が作成されましたが 作成されたのは普通のエクセルシートではないですよね? 初めて見る形式です また縦長の表示で全体が見えません 作成された一覧をどのように扱えばいいのかわかりません 「一覧が作成されたなあ」と感心するだけで、これをチェックシートに使うには どうしたらいいのか皆目見当がつきません 教えていただけませんか
- end-u
- ベストアンサー率79% (496/625)
#[Visual Basic プロジェクトへのアクセスを信頼する]必要があります。 'ActiveWorkbookのプロシージャリスト列挙 'TEST中、何度かExcelが落ちたのでステップ実行は危険。 Sub GetProcLst() Const vbext_ct_StdModule = 1 '標準Module Const vbext_ct_ClassModule = 2 'ClassModule Const vbext_ct_MSForm = 3 'FormClassModule Const vbext_ct_Document = 100 'Book|SheetModule Const vbext_pk_Proc = 0 'Sub|Function プロシージャ Dim vbc As Object 'VBIDE.VBComponent Dim tmp As String Dim cnt As Long Dim mx As Long Dim i As Long Dim j As Long Dim k As Long Dim v Dim ret(0 To 1000, 1 To 5) As String On Error GoTo extLine For Each v In Array("Book", "Module", "Type", "Procedure", "Arg") i = i + 1 ret(0, i) = v Next cnt = 1 With ActiveWorkbook For Each vbc In .VBProject.VBComponents 'Select Case vbc.Type 'Case vbext_ct_StdModule, vbext_ct_Document ret(cnt, 1) = .Name ret(cnt, 2) = vbc.Name ret(cnt, 3) = vbc.Type With vbc.CodeModule mx = .CountOfLines i = 1 Do Until i > mx tmp = .ProcOfLine(i, vbext_pk_Proc) If tmp = "" Then i = i + 1 Else j = .ProcBodyLine(tmp, vbext_pk_Proc) ret(cnt, 4) = tmp ret(cnt, 5) = .Lines(j, 1) k = j Do Until Right$(ret(cnt, 5), 2) <> " _" k = k + 1 ret(cnt, 5) = ret(cnt, 5) & vbLf & .Lines(k, 1) Loop i = j + .ProcCountLines(tmp, vbext_pk_Proc) cnt = cnt + 1 End If Loop End With 'End Select Next End With '新規Bookに列挙 With Workbooks.Add(xlWBATWorksheet).Sheets(1).Range("A1").Resize(cnt, 5) .Value = ret .Columns.AutoFit .Rows.AutoFit End With extLine: Set vbc = Nothing With Err() If .Number <> 0 Then MsgBox .Number & "::" & .Description End If End With End Sub 他、参考情報。 『[XL97] モジュール、プロシージャの情報取得および操作方法』 http://support.microsoft.com/kb/410621/ja 『Visual Basic 6.0 を使用して Excel ブックに格納されているマクロの名前を取得する方法』 http://support.microsoft.com/kb/315731/ja 『Excel 2003 および Excel 2007 で Visual Basic プロジェクトへのアクセスをプログラミングにより許可すると実行時エラーが表示される場合がある』 http://support.microsoft.com/kb/813969/ja
お礼
早速の回答ありがとうございました おかげで、一覧が作成されました ただ、私にとっては非常に敷居の高い処理です 奥が深いことを痛感しました 作成されたSheetに表示された「Type」は何を現しているのでしょうか? 教えてください
お礼
完璧ですね。すばらしいの一言です。 重ねがさねのすばやい回答に感謝です