0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

参照設定の一覧をExcelに出力する

Last updated at Posted at 2017-07-25

タイプライブラリのGUIDが欲しいことがあったため、Excelに一覧を出力するマクロを作成した。

動作

アクティブなブックの参照設定の一覧を、新規ブックのワークシートにテーブルとして出力する。

結果イメージ.png

事前準備

このマクロでは参照設定の情報を取得するためにVBIDE.VBProjectなどにアクセスしている。

しかし、このオブジェクトへのアクセスはデフォルトでは禁止されているため、Officeのセキュリティ設定を変更する必要がある。

なお、この変更によりいわゆる「マクロウィルス」に弱くなるため、開くファイル・実行するコードが問題無いか注意すること。

セキュリティ変更内容
オプション
>セキュリティセンター
  >セキュリティセンターの設定
   >マクロの設定
    >開発者向けのマクロ設定
     >「VBA プロジェクト オブジェクト モデルへのアクセスを信頼する」 にチェック

セキュリティ変更1.png

セキュリティ変更2.png

コード

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]&" -->"
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?