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


Google  

WWW を検索
Excelスキルアップコレクション内 を検索
 @     Top  >     Excelプロフェッショナルエンジニアテクニック Topics  >     (08) Excelブックにモジュールをインポートする

 
(08) Excelブックにモジュールをインポートする

 VBAProjectにモジュールインポートする場合、通常はマウス操作によってインポートメニューを選択して実施するしかありません。

 VBAにてVBAにモジュールをインポートする方法を紹介します。インポート作業のツール化が可能になるでしょう。

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

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

 下記サンプルコードをModule1に記載して下さい。
<Module1>

 1行目:  Public Sub Sample_ImportModule_01()
 2行目:  
 3行目:      ' ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
 4行目:      ' 参照設定:
 5行目:      ' 「Microsoft Visual Basic for Application Extensibility」
 6行目:      ' ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
 7行目:      
 8行目:      ' このブックのVBProjectをオブジェクト変数に格納する。
 9行目:      Dim Obj As VBIDE.VBProject
10行目:      Set Obj = ThisWorkbook.VBProject
11行目:  
12行目:      ' インポートしたいファイル名を決める。
13行目:      Dim ImpFile As String
14行目:      ImpFile = "C:\汎用モジュール\FileIOModule.bas"
15行目:  
16行目:      ' このブックにVBAモジュールをインポートします。
17行目:      Obj.VBComponents.Import ImpFile
18行目:  
19行目:      ' オブジェクトを破棄する。
20行目:      Set Obj = Nothing
21行目:  
22行目:  End Sub
 ここで利用しているのはVBComponentsコレクションのImportメソッドです。
Import(ファイル名){ファイル名}で指定した先へエクスポートする。

 このサンプルコードを実行すると、フォルダ「C:\汎用モジュール」配下の"FileIOModule.bas"がインポートされます。
  
 上記サンプルコードをもう一度実行しても、インポートは成功します。但し、全く同じ内容のモジュールが追加されるだけです。二つ目以降は、インポートしたファイルに連番1〜… が振られます。
 インポートしようとしているファイルと同一モジュールがブックに存在している場合は、インポートを中止させる分岐処理があれば良いでしょう。VBProjectオブジェクトを利用すれば、簡単に実現できます。

 1行目:  Public Sub Sample_ImportModule_01()
 2行目:  
 3行目:      ' ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
 4行目:      ' 参照設定:
 5行目:      ' 「Microsoft Visual Basic for Application Extensibility」
 6行目:      ' ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
 7行目:      
 8行目:      ' このブックのVBProjectをオブジェクト変数に格納する。
 9行目:      Dim Obj As VBIDE.VBProject
10行目:      Set Obj = ThisWorkbook.VBProject
11行目:  
12行目:      ' インポートしたいファイル名を決める。
13行目:      Dim ImpFile As String
14行目:      ImpFile = "C:\汎用モジュール\FileIOModule.bas"
15行目:  
16行目:      ' ブック内にモジュールがあるか判別する。
17行目:      If exists_ImpFile(ImpFile) Then
18行目:          MsgBox "既に同一モジュールが存在します。", vbExclamation
19行目:      Else
20行目:          ' このブックにVBAモジュールをインポートします。
21行目:          Obj.VBComponents.Import ImpFile
22行目:      End If
23行目:  
24行目:      ' オブジェクトを破棄する。
25行目:      Set Obj = Nothing
26行目:  
27行目:  End Sub
28行目:  
29行目:  ' *
30行目:  ' * ブック内にモジュールがあるか判別する関数
31行目:  ' *
32行目:  Public Function exists_ImpFile( _
33行目:        pImpFile As String _
34行目:  ) As Boolean
35行目:  
36行目:      ' 戻り値をFalseで初期化する。
37行目:      exists_ImpFile = False
38行目:  
39行目:      ' FileSystemObjectを生成する。
40行目:      Dim F As Object
41行目:      Set F = CreateObject("Scripting.FileSystemObject")
42行目:  
43行目:      ' ファイルのベース名を切り出す。
44行目:      Dim fileName As String
45行目:      fileName = F.GetBaseName(pImpFile)
46行目:  
47行目:      ' このブックのVBProjectをオブジェクト変数に格納する。
48行目:      Dim Obj As VBIDE.VBProject
49行目:      Set Obj = ThisWorkbook.VBProject
50行目:  
51行目:      ' VBProjectに存在するコンポーネント数を変数に格納する。
52行目:      Dim CompCnt As Long
53行目:      CompCnt = Obj.VBComponents.Count
54行目:  
55行目:      ' VBProjectに存在するコンポーネントを一つずつ参照する。
56行目:      Dim lp As Long
57行目:      For lp = 1 To CompCnt
58行目:          ' モジュールが既に存在していないか判別する。
59行目:          If Obj.VBComponents(lp).Name = fileName Then
60行目:              ' 戻り値をTrueにする。
61行目:              exists_ImpFile = True
62行目:              GoTo END_JUDGE
63行目:          End If
64行目:      Next
65行目:  
66行目:  END_JUDGE:
67行目:  
68行目:      ' オブジェクトを破棄する。
69行目:      Set Obj = Nothing
70行目:      
71行目:  End Function
ページの先頭へ