電子書籍の厳選無料作品が豊富!

他のmdbファイルのform,macro,reportsをテキスト化したい。
asSaveTextを使って、mdbファイルのみが格納されている"C:\testA"フォルダにある全てのmdbファイルに対して、macro,form,reports等のvbeのソースコードを"C:\testB"にテキストファイルとして自動出力してくれるツールを作成したいのですが、エラーで止まってしまいます。何が悪いのかご教授下さいませんでしょうか。
下記のマクロがあるのは、"C:\testA""C:\testB"でもない場所にある適当なmdbファイルの標準モジュールです。

以下は、サンプルソースです。よろしくお願いしますm(--)m

Option Compare Database
Public Sub Output()
Dim db As Database
Dim souce As Container
Dim InPutPass As String
Dim OutPutPass As String
Dim FileName As String
Dim FilePass As String
Dim objAccess
Const cnsDIR = "\*.*"

InPutPass = "C:\testA"
OutPutPass = "C:\testB"

FileName = Dir(InPutPass & cnsDIR, vbNormal)

Do While FileName <> ""
'開くファイルのパスを設定
FilePass = InPutPass & "\" & FileName
'Accessオブジェクトを作成します
Set appAccess = CreateObject("Access.Application")

'MDBファイルを開きます
appAccess.OpenCurrentDatabase (FilePass)


'macroをテキスト化する
Set souce = appAccess.Containers("Scripts")
For Each d In souce.Documents
If Left(d.Name, 1) <> "~" Then
Application.SaveAsText acMacro, d.Name, OutPutPass & "\Macro_" & d.Name & ".txt"
End If
Next d

'Formをテキスト化する
Set souce = db.Containers("Forms")
For Each d In souce.Documents
If Left(d.Name, 1) <> "~" Then
Application.SaveAsText acForm, d.Name, OutPutPass & "\Form_" & d.Name & ".txt"
End If
Next d

'Reportをテキスト化する
Set souce = db.Containers("Reports")
For Each d In souce.Documents
If Left(d.Name, 1) <> "~" Then
Application.SaveAsText acReport, d.Name, OutPutPass & "\Reports_" & d.Name & ".txt"
End If
Next d

'MDBファイルを閉じます
appAccess.CloseCurrentDatabase

'Accessオブジェクトの破棄
Set appAccess = Nothing

'次のファイル名を取得
FileName = Dir()
Loop
End Sub

A 回答 (4件)

よく見たら、


appAccess
も変数宣言されていません。この場合は
たぶん、
Dim appAccess As Access.Application
にでもなるのかと思いますが。

それで、エラー番号とエラー内容は?

この回答への補足

会社でaccessVBAをコーディングしているんですが、エラー内容を控えるのを忘れてしまいました。
上記のソースを一度忘れて頂いて、本当にやりたい事だけを書くと
a.mdbとb.mdbの2つのファイルがあったとして、
a.mdbの標準モジュールにソースAを書いて、それを実行すると
b.mdb内に記述されているVBAソース(macro,form,report)を
テキスト化して任意の場所に出力してくれるというソースAを作りたいのです。

実現方法はある程度分かっていて、"saveastext"を使えば良いと
思うのですが、他のmdbファイルの情報を"saveastext"を
使って出力させる方法が分からないのです。

仕事で使いたくて、とても困っています。
どうすれば良いのか教えて頂けないでしょうか。

補足日時:2010/06/04 00:56
    • good
    • 0

ほかファイルにあるからエラーでダメ、ならばインポートさせてからと思います。


参考
mdb同士のコンペアツールをmdbで作ってあるのを社内システムでみたことありますがそのときはファイルをダイアログで選んで比較オブジェクトも選んで実行でした。このコマンドも使われてました。アクセスがもっている隠しテーブルも使用。
    • good
    • 0

追加ですが、習慣として


End Sub の前にいらなくなった
オブジェクトはすべて閉じて、破棄するように。
    • good
    • 0

>For Each d In souce.Documents



まず、ここでdは変数宣言されていない。
Dim d As Document


エラーの番号と内容がわからないと
何ともいえません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!