データサービス事業
  オープンテクノロジー(Red Bible)
  パッケージ事業
  SI事業




≪Red Bible≫
  ブラウザ自動操作
  ExcelVBAソースの可視化
  AccessMDBの可視化
  C#プロジェクトソースの可視化
  ExcelをWebクライアントにする NEW! 

≪データサービス≫
  新設法人データ(確報版)
  新設法人データ(速報版)

≪パッケージ≫
  登記データ自動取得プログラム
  新設法人データ自動取得プログラム
  OCR文書管理プログラム

≪サービス≫
  OCRデータエントリーサービス
  登記データ取得代行サービス
  Webデータ情報収集サービス

≪システムインテグレーションサービス≫
  Webシステム業務運用改善技術
  Webクローリングシステム
  IT資産分析サービス
  モデリングサービス(リエンジニアリング)
  レガシーコンバージョンサービス事例
  OCRエントリーシステム構築

≪会社情報≫
  会社情報

≪お問い合わせ≫
  お問い合わせはコチラ
AccessMDBのVBAを可視化
概要
 AccessMDB・VBAの可視化 

 §3   ビジネステクノロジー活用講座

■AccessMDBのVBAソースコードを可視化/一覧化する

MSAccessで書かれたソースコードが100万ステップ、それほど気軽に開発できるのがAccessです。しかし、どれが生きているモジュールか、どれが 不要で削除してよいか簡単に判別できなくなることもよくあります。こんな時にはMDBの中に定義されたVBAソースを1つのExcelシート上にまとめれば、解析も容易。 あとはExcelの機能でVBAを可視化、解析が簡単にできます。
以下のような解析画面はその下に添付したVBAソースをそのまま使用すれば、すぐに実行し、作成できます。

☆動かない場合にはお気軽にお問い合わせください☆


Excelに取り込んで作成したAccessMDBのVBAソースファイル一覧

AccessMDBの中の全VBAソースコードを取込み、表示

Excelのフィルタ機能やVBAで作成した関数レベルの一覧表

【AccessMDBのVBA可視化プログラム・ソース】


'
'  ソースをExportするプログラムです。実行時に解析したいMDBを指定すれば、カレントフォルダに\sourceフォルダが作成され、そのフォルダ下にVBAソースがExportされます。
'
Option Explicit

Private Sub CommandButton1_Click()
Dim inFileName, fs, inFile, outPath, outFolderName
Dim accessObj, vbproject, vbcComp, ext, moduleName
 
inFileName = GetFilename("c:\")  '取り込むMDBを選択
outPath = ThisWorkbook.Path
 
Set fs = CreateObject("Scripting.FileSystemObject")
Set inFile = fs.GetFile(inFileName)
outPath = outPath & "\source"
 
' 出力フォルダが存在していれば消して作り直す
If fs.FolderExists(outPath) Then
    fs.DeleteFolder (outPath)
End If
fs.CreateFolder (outPath)
Set outFolderName = fs.GetFolder(outPath)
 
'mdbを開く
Set accessObj = CreateObject("Access.Application")
accessObj.OpenCurrentDatabase (inFileName)
 
' モジュールをテキスト化
Set vbproject = accessObj.VBE.ActiveVBProject
 
For Each vbcComp In vbproject.VBComponents
    Select Case vbcComp.Type
        Case 100, 1         'Module
            ext = ".bas"
        Case 2              'class
            ext = ".cls"
        Case 3              'Form
            ext = ".frm"
        Case Else
            ext = ""
   End Select

   moduleName = Replace(vbcComp.Name, "/", "_")
   vbcComp.Export (outFolderName.Path & "\" & moduleName & ext)
Next
accessObj.Application.Quit

MsgBox "完了しました"

End Sub

'ファイル選択
Function GetFilename(pathname) As String
Dim FN As String
With Application.FileDialog(msoFileDialogFilePicker)
  .InitialFileName = pathname
  If .Show = -1 Then
    FN = .SelectedItems(1)
  Else
    FN = ""
  End If
End With
GetFilename = FN
End Function


'
'  上記のExportデータを一括してExcelシートに読込み、関数一覧などを作成するVBAです。
'
Dim out_ctr As Long

'全ソース読込み
Private Sub CommandButton1_Click()
    Dim foldername As String
    Dim i As Long
    Dim x, y As String
    Dim buff As String
            
    out_ctr = 0
    Worksheets("Sheet1").Cells.ClearContents
    Worksheets("Sheet2").Cells.ClearContents
      
    foldername = GetFoldername("c:\")
    If foldername <> "" Then
      Call getFileList(foldername)
      
      out_ctr = 1
      i = 1
      Do Until Worksheets("Sheet1").Cells(i, 1) = ""
        x = Worksheets("sheet1").Cells(i, 2)
        j = InStrRev(x, ".")
        y = StrConv(Mid(x, j, 10), vbLowerCase)
        If y = ".bas" Or y = ".cls" Or y = ".frm" Then
          Open Worksheets("Sheet1").Cells(i, 1) & "\" & Worksheets("Sheet1").Cells(i, 2) For Input As #1
          num = 0
          Do Until EOF(1)
            Line Input #1, buff
            num = num + 1
            y = StrConv(buff, vbLowerCase)
            If InStr(1, y, "function ") > 0 And InStr(1, y, "end function") < 1 Or _
               InStr(1, y, "sub ") > 0 And (InStr(1, y, "end sub") < 1 Or InStr(1, y, "exit sub") < 1) Then

              Worksheets("Sheet2").Cells(out_ctr, 1) = Worksheets("sheet1").Cells(i, 1)
              Worksheets("Sheet2").Cells(out_ctr, 2) = Worksheets("sheet1").Cells(i, 2)
              Worksheets("Sheet2").Cells(out_ctr, 3) = buff
              Worksheets("Sheet2").Cells(out_ctr, 4) = num

              out_ctr = out_ctr + 1
            
            End If
            
          Loop
          Close #1
        End If
        i = i + 1
      Loop
    End If
    
End Sub

'ファイル一覧作成
Sub getFileList(DirPath As String)
    Dim buff As String, fl As Object
    buff = Dir(DirPath & "\*.*")
    Do While buff <> ""
        out_ctr = out_ctr + 1
        Cells(out_ctr, 1) = DirPath
        Cells(out_ctr, 2) = buff
        buff = Dir()
    Loop
    With CreateObject("Scripting.FileSystemObject")
        For Each fl In .GetFolder(DirPath).SubFolders
            Call getFileList(fl.Path)
        Next fl
    End With
End Sub

'フォルダ選択
Function GetFoldername(pathname) As String
Dim FN As String
With Application.FileDialog(msoFileDialogFolderPicker)
  .InitialFileName = pathname
  If .Show = -1 Then
    FN = .SelectedItems(1)
  Else
    FN = ""
  End If
End With
GetFoldername = FN
End Function


Excelシートに取り込めば、あとはExcelの検索やフィルタ機能、さらにはVBAを使えば本格的なプログラム解析まで簡単に可能です。 システムエンジニアの手作業に依存せず、エンジニアよりも安く、早く、正確に作業が可能です。ぜひお試しください。