Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Professional : Access 2010)
マクロをVisualBasicに変換を自動化したい
投稿日時: 18/08/08 14:05:22
投稿者: George

こんにちは。
 
早速ですが、社内で使用しているDBでマクロを含んでいるものがあります。
その全てのマクロをVisual Basicに変換したいと思っているのですが、
数が多いので手動でやらずに自動化できないかと思っています。
 
しかし、マクロに該当するコレクション名などがわからないので
実装できないで困っています。
そこがクリアできたらFor Each 〜 Nextなりでループしたら良いと思っています。
 
すみませんが教えていただけませんでしょうか。

回答
投稿日時: 18/08/08 15:42:51
投稿者: sk

引用:
その全てのマクロをVisual Basicに変換したいと思っているのですが、
数が多いので手動でやらずに自動化できないかと思っています。

プロシージャを実行しただけで全てが完結するレベルでの
自動変換処理を実現するのは、基本的に無理だと思います。
 
また、マクロオブジェクトはともかくとして、
データマクロ埋め込みマクロを VBA に変換することは
出来ません。
 
引用:
マクロに該当するコレクション

引用:
For Each 〜 Next

(標準モジュール)
---------------------------------------------------------
Sub subConvertAllMacrosToVisualBasic()
On Error GoTo Err_subConvertAllMacrosToVisualBasic
 
    Dim AccObj As Access.AccessObject
         
    For Each AccObj In CurrentProject.AllMacros
        DoCmd.SelectObject acMacro, AccObj.Name, True
        DoCmd.RunCommand acCmdConvertMacrosToVisualBasic
    Next
 
Exit_subConvertAllMacrosToVisualBasic:
     
    Exit Sub
 
Err_subConvertAllMacrosToVisualBasic:
     
    Debug.Print Err.Number & ": " & Err.Description
     
    Resume Exit_subConvertAllMacrosToVisualBasic
End Sub
---------------------------------------------------------
 
上記のコードでは「ナビゲーションウィンドウ上のマクロオブジェクトを選択して
[マクロを Visual Basic に変換]コマンドを実行する」という操作を
繰り返すことになるわけですが、次のような問題があります。
 
・[マクロを Visual Basic に変換]コマンドが実行されるたびに
 [マクロの変換]ダイアログが表示され、[変換]ボタンまたは
 [キャンセル]ボタンがクリックされるまでコードが中断される
 (コードが中断されている状態では SendKeys ステートメントも効かない)
 
・[変換]ボタンをクリックするとモジュールへの変換処理が実行されるが、
 変換完了と同時にその旨を知らせるメッセージボックスが表示され、
 [OK]ボタンがクリックされるまでコードが中断される
 (同上)
 
隠しオブジェクトとして設定されているマクロが存在する場合、
 そのマクロをナビゲーションウィンドウ上から選択出来ないことがある
 ( SelectObject メソッドの実行時にエラー 2544 が発生する)。
 したがって、上記のプロシージャを実行する前に、あらかじめ
 ナビゲーションオプションから[隠しオブジェクトの表示]オプションを
 有効にしておくことが望ましい。
 
そのファイルにどれだけ多くのマクロオブジェクトが存在するのかは
不明ですが、全てのマクロの変換が完了するまで、延々と[変換]ボタンや
[OK]ボタンをクリックし続けても構わないのであれば、モジュールへの
変換作業の補助機能として上記のようなプロシージャを作成なさればよろしいかと。

投稿日時: 18/08/08 16:30:34
投稿者: George

skさん 早速の回答ありがとうございました。
 
提示いただいたソースコードを動かしたところ
動作をしたのですが、おっしゃっていた通り
ダイアログが出て中断されます。
 
こちらを回避することはできないのでしょうか?
DoCmd.SetWarning Falseではできないことは確認しました。
 

回答
投稿日時: 18/08/08 16:59:44
投稿者: sk

引用:
提示いただいたソースコードを動かしたところ
動作をしたのですが、おっしゃっていた通り
ダイアログが出て中断されます。
  
こちらを回避することはできないのでしょうか?

[マクロを Visual Basic に変換]コマンド自体が
「[マクロの変換]ダイアログを表示させる」命令である
と言えますので、まず無理でしょう。
 
引用:
DoCmd.SetWarning Falseではできないことは確認しました。

SetWarnings メソッドによって制御できるのは
「アクションクエリの実行」や「オブジェクトの削除」
といった操作に伴う確認メッセージの表示の有無であり、
[マクロの変換]ダイアログは対象外です。

回答
投稿日時: 18/08/08 17:57:01
投稿者: sk

追記:
 
いずれにせよ、VBA プロジェクトに作用するこの手のコードを
実行される場合は、念のためその mdb / accdb ファイルの
バックアップを取っておくことをお奨めします。
(モジュールの生成/解放を頻繁にやりすぎると
プロジェクトが壊れるリスクが高まりますので)

投稿日時: 18/08/09 08:10:24
投稿者: George

skさん
丁寧な回答ありがとうございます。
メッセージを出さずに実現出来ないのがわかりましたので
地道にやっていこうと思います。
 
これにてクローズとします。