• ベストアンサー

Accessでmdb中のすべてのマクロを取り出したい

いつも楽しく勉強させていただいております。 今度、Access(2000)の大量のクエリとマクロでできているシステムをリライトすることになりました。 mdbファイルの数は数千、それぞれ数百のクエリとマクロから成り立っています。VBAはほとんど使っていません。システム部に頼らずにに各ユーザー(非システム系)が自分で使うツール的なものを作っていった結果こうなりました。もちろん使われていないシステムが多いですが、もはやどれが生きているのかすら誰も把握できていない状態ですので、少しずつ統合していこうということになりました。 問題は、あまりに数が多いのでマクロもクエリもいちいちデザインビューで開いて読んでいると訳がわからなくなることです。 下記は同僚にもらったコードですが、mdbファイル内のクエリの内容(SQL文)をテキストファイルに書き出します。これが結構役に立ってくれます。 Sub b() Dim fs As Object, a As Object Dim db As Database Dim qdf As QueryDef Set fs = CreateObject("Scripting.FileSystemObject") Set a = fs.CreateTextFile("c:\hoge.txt", True) Set db = CurrentDb For Each qdf In db.QueryDefs a.WriteLine qdf.Name a.WriteLine qdf.SQL Next a.Close End Sub 私が知りたいのは、これを応用してマクロの中身を出力する方法です。 おそらく、 Dim qdf As QueryDef と qdf.SQL あたりを変更すると可能なのじゃないかと・・・。 どなたかご存知でしたら、教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1
-manaka-
質問者

お礼

cistronezkさま 回答ありがとうございます。リンク先を参考にプログラムを書いてみましたが、うまく動いてくれません。 (ちなみにこれはAccessではなくて、Excelマクロに書くんですよね?) objAccess.OpenCurrentDatabase "C:\sample.mdb.mdb"までは何とか動いているようです。 (ウォッチウィンドウで変数objAccessをのぞくといろいろ設定されているから)。 その次の objAccess.CurrentDb.Containers("Scripts").Documents.Count で実行時エラー430(クラスはオートメーションまたは予測したインターフェースをサポートしていません)で落ちます。 何が悪いのでしょうか。 ExcelもAccessも2000で、Excel側でMicrosoft Access 9.0 Object Libraryを追加したのですが。 Sub a() Dim obj As Object Dim i As Long Dim obj_mdl As Access.Module 'Access起動 Dim objAccess As New Access.Application objAccess.OpenCurrentDatabase "C:\sample.mdb.mdb" 'On Error Resume Next For i = 0 To objAccess.CurrentDb.Containers("Scripts").Documents.Count - 1 filenamex = objAccess.CurrentDb.Containers("Scripts").Documents(i).Name objAccess.Application.SaveAsText acMacro, filenamex, "c:\aaa\M_" & filenamex & ".txt" Next i End Sub

-manaka-
質問者

補足

リンク先を参考に、何とか動くものができました。 解析したいAccessのモジュール内に置いて使えます。 Sub b() Set cntscripts = CurrentDb.Containers("scripts") For i = 0 To CurrentDb.Containers("scripts").Documents.Count - 1 DocName = CurrentDb.Containers("scripts").Documents(i).Name filename = CurrentDb.Containers("Scripts").Documents(i).Name SaveAsText acMacro, filename, "c:\tmp\M_" & filename & ".txt" Next i End Sub

その他の回答 (1)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

ACCESS 仕様書 ツール こんな感じのキーワードを使って Google で検索してみて。 目的にあうものがあればいいけど。

-manaka-
質問者

お礼

KenKen_SPさま、回答ありがとうございます。 ちょっと検索してみたのですが、Accessの解析ツールとなるとどれも有償みたいですね。将来的にはそういうものの購入も考えられますが、まだ仕事に取り掛かる前の段階で、予算の申請をするのはも少し後になってしまいます。 クエリのSQLプロパティを取り出すみたいに、自分で簡単にできないものでしょうか。

-manaka-
質問者

補足

KenKen_SPさま、お礼に補足させていただきます。 解析ツール、フリーのものもありました! ↓でダウンロードできました。 http://www.vector.co.jp/download/file/win95/business/fh485845.html すごくきれいに出力されるので感激です。 しかしながら、やはりマクロの命令文を取り出すプログラムがあればいろいろ便利な気がするので、この質問はしばらく閉めないでおきます。

関連するQ&A