タイプライブラリのGUIDが欲しいことがあったため、Excelに一覧を出力するマクロを作成した。
動作
アクティブなブックの参照設定の一覧を、新規ブックのワークシートにテーブルとして出力する。
事前準備
このマクロでは参照設定の情報を取得するためにVBIDE.VBProject
などにアクセスしている。
しかし、このオブジェクトへのアクセスはデフォルトでは禁止されているため、Officeのセキュリティ設定を変更する必要がある。
なお、この変更によりいわゆる「マクロウィルス」に弱くなるため、開くファイル・実行するコードが問題無いか注意すること。
セキュリティ変更内容
オプション
>セキュリティセンター
>セキュリティセンターの設定
>マクロの設定
>開発者向けのマクロ設定
>「VBA プロジェクト オブジェクト モデルへのアクセスを信頼する」 にチェック
コード
Excelの任意のモジュールに貼り付けて、CreateReferenceTable
を実行する。
追加の参照設定は不要。
Option Explicit
'出力するテーブルの列番号
Private Enum RefColumnNo
rcnName = 1
rcnDesc
rcnPath
rcnGUID
rcnVer
End Enum
'列の数
Private Const COL_COUNT& = RefColumnNo.rcnVer
'出力するテーブルのヘッダー。"|"区切りで指定。
Private Const TABLE_HEADER$ = "Name|Description|FullPath|GUID|Version"
Private Sub CreateReferenceTable()
'参照設定の情報取得
'※セキュリティ設定を解除していないとここでエラー
Dim tgtRefs As Object 'As VBIDE.References
Set tgtRefs = Excel.ActiveWorkbook.VBProject.References
Dim oTable() As String '配列は1開始前提
ReDim oTable(1 To tgtRefs.Count, 1 To COL_COUNT)
Dim ref As Object 'As VBIDE.Reference
Dim r As Long: r = LBound(oTable, 1)
For Each ref In tgtRefs
With ref
oTable(r, rcnName) = .Name
oTable(r, rcnDesc) = .Description
oTable(r, rcnPath) = .FullPath
oTable(r, rcnGUID) = .GUID
oTable(r, rcnVer) = .Major & "." & .Minor
End With 'ref
r = r + 1
Next ref
'新規ブックにテーブルとして出力
Dim destWs As Excel.Worksheet
Set destWs = Excel.Workbooks.Add.Worksheets.Item(1)
With destWs.Range("A1").Resize(UBound(oTable, 1), UBound(oTable, 2))
'まずはデータを出力
.Value = oTable
'テーブルに変換して整形
With destWs.ListObjects.Add(xlSrcRange, .Cells, , xlNo)
.ShowHeaders = True
.HeaderRowRange = VBA.Split(TABLE_HEADER, "|")
With .Range 'テーブル全体
.Rows.AutoFit
.Columns.AutoFit
End With '.Range
End With 'destWs.ListObjects.Add(~
End With 'destWs.Range("A1").Resize(~
End Sub
自分用
<reference> 要素 (Windows Script Host)
ワークシート関数
="<reference guid="""&[@GUID]&""" version="""&[@Version]&""" /> <!-- "&[@Description]&" -->"