• ベストアンサー

アクセス2000の終了時にバックアップするマクロ

アクセス2000で家計簿を付けてます。終了時にcd-rwに自動的にバックアップするマクロを作りたいです。職場の業務システムはアクセス95を使っていて、自動的にバックアップが取れて便利です。私のアクセスの知識は簡単なマクロをマクロビルダで作れる位です。宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.2

メッセージボックスは単なるサンプルであって、バックアップの方法ではありません。 何のサンプルかと言うと、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

hiroegon
質問者

お礼

長文の回答有り難うございます。早速やってみます。感謝感激です。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.1

方法1・ACCESS内部で処理する場合 ※フォームを作成 フォーム名:ダミーフォーム   フォームの閉じる時にイベントを記載   Private Sub Form_Close()     MsgBox "フォームが閉じられます"   End Sub ※マクロ1作成 アクション:フォームを開く   フォーム名:ダミーフォーム   ビュー:フォームビュー   ウィンドウモード:非表示 ※DBの起動時の設定でマクロ1を設定 ※DBを再起動 ※終了時に非表示のフォームが閉じられ、メッセージボックスが表示される 方法2・他のACCESSやVBなどから処理する場合 プログラムの知識が必要です。 必要であれば記載します。

hiroegon
質問者

お礼

丁寧な回答有り難うございます。メッセージボックスを表示すると何故バックアップ出来るのか分からないです。理由を教えて下さい。VBも宜しかったら、書いて下さい。宜しくお願いします。

すると、全ての回答が全文表示されます。

関連するQ&A