2007年09月20日

Access:マクロの内容を取得するVBA

マクロの内容を取得するVBA。Accessの非公開APIを使用して取得する。


Declare Function api_Macro_Close Lib "msaccess.exe " Alias "#20" (ByVal hMacro As Long) As Long
Declare Function api_Macro_NextRow Lib "msaccess.exe" Alias "#22" (ByVal hMacro As Long, ByVal lSkipBlank As Long, lEndOfMacro As Long) As Long
Declare Function api_Macro_GetActID Lib "msaccess.exe" Alias "#29" (ByVal hMacro As Long) As Long

Sub ListMacroDetail()
Dim lHdr As Long, sArgs1 As String, lActID As Long, Macro As Variant, i As Long, ret As Long
Dim sArg(5) As String

WizHook.key = 51488399:

For Each Macro In CurrentProject.AllMacros
lHdr = WizHook.OpenScript(Macro.Name, "", 0, 0, 0)
If lHdr Then
Do While api_Macro_NextRow(lHdr, 0, 0)
'マクロ名(オブジェクト)
Debug.Print Macro.Name & ",";
'マクロ名(ラベル)
Call WizHook.GetScriptString(lHdr, 0, sArgs1)
Debug.Print sArgs1 & ",";
'条件式
Call WizHook.GetScriptString(lHdr, 2, sArgs1)
Debug.Print sArgs1 & ",";
'アクション
lActID = api_Macro_GetActID(lHdr)
Debug.Print WizHook.NameFromActid(lActId) & "(" & lActId & "),";
'コメント
Call WizHook.GetScriptString(lHdr, 1, sArgs1)
Debug.Print sArgs1 & ",";
'第1パラメータ
Call WizHook.GetScriptString(lHdr, 3, sArgs1)
Debug.Print sArgs1 & ",";
'第2パラメータ
Call WizHook.GetScriptString(lHdr, 4, sArgs1)
Debug.Print sArgs1 & ",";
'第3パラメータ
Call WizHook.GetScriptString(lHdr, 5, sArgs1)
Debug.Print sArgs1 & ",";
Debug.Print
Loop
api_Macro_Close lHdr
End If
Next
End Sub


posted by 忘却の達人 at 07:52| Comment(0) | TrackBack(0) | Access | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。