- PR -

Accessのマクロのコードを取り出す方法

1
投稿者投稿内容
るろうのタミー
会議室デビュー日: 2007/07/30
投稿数: 3
投稿日時: 2007-07-30 16:36
お世話になります。
複数あるAccessアプリのサポートのため、エクセルからmdbファイルのコードを取り出すツールを作ろうとしています。(Office2003を使用しています。)
Accessの標準モジュールは取り出せたのですが、マクロとクエリのコードを取り出す方法がわかりません。
ご存知の方はご教示お願いできないでしょうか。

標準モジュールは、下記の通りで取り出せました。
Dim obj As Object
Dim i As Long
Dim obj_mdl As Access.Module

'Access起動
Dim objAccess As New Access.Application
objAccess.OpenCurrentDatabase MDB_DB, True, ""

On Error Resume Next
For Each obj In objAccess.CurrentProject.AllModules
  'エクセルシートに書込み
Sheets("MDB_FUNC").Cells(line, 1) = obj.name
objAccess.DoCmd.OpenModule obj.name
Set obj_mdl = objAccess.Modules(obj.name)
For i = 1 To obj_mdl.CountOfLines
'コード
Sheets("MDB_FUNC").Cells(line, 3) = obj_mdl.Lines(i, 1)
'標準モジュールの関数名
Sheets("MDB_FUNC").Cells(line, 4) = obj_mdl.ProcOfLine(i, vbext_pk_Proc)

line = line + 1
Next i
objAccess.DoCmd.Close acModule, obj.name
line = line + 1
Next obj
objAccess.CloseCurrentDatabase
Set objAccess = Nothing

宜しくお願いいたします。
るろうのタミー
会議室デビュー日: 2007/07/30
投稿数: 3
投稿日時: 2007-07-31 14:34
自己レスです。

時間が無い事もあって、諦めてテキスト文に吐き出す方法が載っていたので、これで回避することにしました。
マクロ:
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

クエリ:
'クエリをファイル化
For i = 0 To objAccess.CurrentDb.QueryDefs.Count - 1
filenamex = objAccess.CurrentDb.QueryDefs(i).name
objAccess.Application.SaveAsText acQuery, filenamex, "c:\aaa\Q_" & filenamex & ".txt"
Next i

※但し、クエリは、SQL文にならないので見づらい。
 SQL文で吐き出す方法があれば引き続きお願いします。
るろうのタミー
会議室デビュー日: 2007/07/30
投稿数: 3
投稿日時: 2007-08-02 15:02
自己レス2

>※但し、クエリは、SQL文にならないので見づらい。
>SQL文で吐き出す方法があれば引き続きお願いします

DAOを使えばSQL文のプロパティがあり、無事解決しました。
おじゃましました。

[ メッセージ編集済み 編集者: るろうのタミー 編集日時 2007-08-02 15:03 ]
1

スキルアップ/キャリアアップ(JOB@IT)