メッセージボックスは単なるサンプルであって、バックアップの方法ではありません。
何のサンプルかと言うと、Accessは起動時に起こるイベントを取得できますが、終了時を取得することができません。
ですので、終了時を取得する方法を載せたのです。
MDBをまるまるバックを取るなら、、、
メッセージボックスの変わりに、FileCopyを実行してあげると、ファイルの複製ができます。下のサンプルでも、バックアップを行うところに書いてありますので、参考にしてください。
ご要望のVBのサンプルも載せておきます。
これは、フォームを利用していますが、ループを行って待機をしておりますので、あまりお勧めできる方法ではないかもしれません。
Private Const PROCESS_QUERY_INFORMATION = &H400&
Private Const STATUS_PENDING = &H103&
Private Const STILL_ACTIVE = STATUS_PENDING
Private Declare Function FindExecutable Lib "shell32.dll" Alias "FindExecutableA" (ByVal lpFile As String, ByVal lpDirectory As String, ByVal lpResult As String) As Long
Private Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32.dll" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long
Private Sub Command1_Click()
Const DEF_FILE As String = "c:\test.mdb"
Dim strExeName As String * 1024
Dim lngInstance As Long
Dim strWk As String
Dim lngProcessId As Long
Dim lngProcessHandle As Long
Dim lngProcessExitCode As Long
On Error GoTo PGMEND
Me.Visible = True
'関連付いたEXEを取得
lngInstance = FindExecutable(DEF_FILE, vbNullString, strExeName)
If lngInstance < 33 Then
MsgBox "関連付いたEXEの取得失敗"
GoTo PGMEND
End If
'起動
strWk = Left$(strExeName, InStr(1, strExeName, vbNullChar) - 1) & " " & DEF_FILE
lngProcessId = Shell(strWk, vbNormalFocus)
If lngProcessId = 0& Then
MsgBox "起動失敗"
GoTo PGMEND
End If
'待機
lngProcessHandle = OpenProcess(PROCESS_QUERY_INFORMATION, 0&, lngProcessId)
Do
Call GetExitCodeProcess(lngProcessHandle, lngProcessExitCode)
Loop While lngProcessExitCode = STILL_ACTIVE
Call CloseHandle(lngProcessHandle)
'バックアップ
FileCopy DEF_FILE, DEF_FILE & "." & Format(Now, "yyyymmddhhnnss")
PGMEND:
Me.Visible = True
End Sub
お礼
長文の回答有り難うございます。早速やってみます。感謝感激です。