Excelスキルアップコレクション
           〜 Something U Want 〜


Google  

WWW を検索
Excelスキルアップコレクション内 を検索
 @     Top  >     Excelプロフェッショナルエンジニアテクニック Topics  >     (12) モジュールに含まれるプロシジャの一覧を作成する

 
(12) モジュールに含まれるプロシジャの一覧を作成する

 モジュールの総行数を調べるCountOfLinesとのProcOfLineプロパティを用いて、モジュール内に存在しているプロシジャの一覧を取得することができます。

 Visual Baisc プロジェクトへのアクセスを許可します。

  「(04) Visual Baisc プロジェクトへのアクセスを許可する方法」

 下記サンプルコードをModule1に記載して下さい。Module1中に存在するプロシジャの一覧を作成する例です。
<Module1>

 1行目:  Public Sub Sample_MakeProcList_01()
 2行目:  
 3行目:      ' ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
 4行目:      ' 参照設定:
 5行目:      ' 「Microsoft Visual Basic for Application Extensibility」
 6行目:      ' ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
 7行目:      Dim lp As Long  ' 単純なループカウンタ
 8行目:  
 9行目:      ' このブックのVBProjectをオブジェクト変数に格納する。
10行目:      Dim Obj As VBIDE.VBProject
11行目:      Set Obj = ThisWorkbook.VBProject
12行目:  
13行目:      ' CountOfLinesプロパティを用いてモジュールの総行数を調べる。
14行目:      Dim rowCnt As Long
15行目:      rowCnt = Obj.VBComponents("Module1") _
16行目:          .CodeModule.CountOfLines
17行目:  
18行目:      ' "Module1"のコードの中を1行目から順次参照する。
19行目:      Dim cnt As Long
20行目:      cnt = 0
21行目:      Dim ProcHS As Object
22行目:      Set ProcHS = CreateObject("Scripting.Dictionary")
23行目:      For lp = 1 To rowCnt
24行目:          ' lp 行目のプロシジャ名を取得する。
25行目:          Dim procName As String
26行目:          procName = Obj.VBComponents("Module1") _
27行目:              .CodeModule.ProcOfLine(lp, 0)
28行目:          
29行目:          ' 初めて取得するプロシジャ名を連想配列に格納する。
30行目:          If procName <> "" _
31行目:              And ProcHS.exists(procName) = False Then
32行目:              cnt = cnt + 1
33行目:              ProcHS.Add procName, cnt
34行目:          End If
35行目:      Next
36行目:  
37行目:      ' 存在していたプロシジャ名をメッセージボックスで表示する。
38行目:      Dim ProcArr
39行目:      ProcArr = ProcHS.Keys
40行目:      For lp = LBound(ProcArr) To UBound(ProcArr)
41行目:          MsgBox ProcArr(lp)
42行目:      Next
43行目:  
44行目:      ' オブジェクトを破棄する。
45行目:      Set Obj = Nothing
46行目:      Set ProcHS = Nothing
47行目:  
48行目:  End Sub
49行目:  
50行目:  ' *
51行目:  ' * Proc1 引数無し
52行目:  ' *
53行目:  Private Sub Proc1()
54行目:      MsgBox "I'm Private Sub Proc1"
55行目:  End Sub
56行目:  
57行目:  ' *
58行目:  ' * Proc2 引数無し
59行目:  ' *
60行目:  Private Sub Proc2()
61行目:      MsgBox "I'm Private Sub Proc2"
62行目:  End Sub
63行目:  
64行目:  ' *
65行目:  ' * Proc3 引数無し
66行目:  ' *
67行目:  Private Sub Proc3()
68行目:      MsgBox "I'm Private Sub Proc3"
69行目:  End Sub
 このサンプルコードを実行すると、以下のメッセージボックスが表示されます。
ページの先頭へ