• 締切済み

以下のVBAについて

Option Compare Database Option Explicit Private Sub バックアップ開始_Click() Dim strBaseName As String Dim strFileName As String If IsNull(Me.バックアップ日付) = True Or Len(Me.バックアップ日付) = 0 Then MsgBox "バックアップ日付をyyyymmdd形式で入力してください。", vbOKOnly + vbCritical, "" Me.バックアップ日付.SetFocus Exit Sub End If strBaseName = "C:\Data\在庫管理.mdb" strFileName = "C:\Backup\" & Format(Me.日付, "yyyymmdd") & "StockData.mdb" If Dir(strFileName) <> "" Then If MsgBox(strFileName & Chr(13) & "は存在します。" & Chr(13) & _ "上書しますか?", vbYesNo + vbQuestion, "") = vbNo Then Exit Sub End If End If On Error GoTo LBL_ERROR FileCopy strBaseName, strFileName MsgBox "バックアップが完了しました。", vbInformation, "" LBL_EXIT: Exit Sub LBL_ERROR: Resume LBL_EXIT End Sub 上記のVBAでバックアップを行いたいのですが、フォルダ等も設定しているの実行されません。上記の文に間違いがあるのでしょうか? ソフトはAccessです。

みんなの回答

  • bonaron
  • ベストアンサー率64% (482/745)
回答No.4

FileCopy は 開かれている mdb のコピーはできません。 もし、"C:\Data\在庫管理.mdb" が 今、開いているこのファイル、 または、開かれている他のファイルなら FileSystemObject の CopyFile メソッドを使えばコピーすることができます。 http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/script56/html/jsmthcopyfile.asp

参考URL:
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/script56/html/jsmthcopyfile.asp
noname#22222
noname#22222
回答No.3

s_husky です。 面目ないです。 質問者と同じミスをしていました。 Private Sub バックアップ開始_Click() On Error GoTo Err_バックアップ開始_Click   Dim isClick As Boolean   Dim Answer As Integer   If Len(Me.バックアップ日付 & "") = 0 Then     Message "バックアップ日付をyyyymmdd形式で入力してください。"     Me.バックアップ日付.SetFocus   Else     Answer = vbYes     If FileExists(strFileName) Then       Answer = Verify(strFileName & "は存在します。上書しますか?")     End If     If Answer = vbYes Then       FileCopy "C:\Data\在庫管理.mdb", _            "C:\Backup\" & Format(Me.日付, "yyyymmdd") & "StockData.mdb"       Message "バックアップが完了しました。"     End If   End If Exit_バックアップ開始_Click:   Exit Sub Err_バックアップ開始_Click:   ErrMsg Err.Description & "(バックアップ開始_Click)"   Resume Exit_バックアップ開始_Click End Sub

noname#22222
noname#22222
回答No.2

全体のプロシージャの構造がいけません。 次は、私流の書き方です。 1、エラートラップは、全体に次のような基本形にするのが望ましいです。 2、Exit Sub は、<Exit_プロシージャ>以外では使わないようにします。 3、ヌルチェックは、Len(コントロール & "")で十分です。 4、コードは目でなぞったら意味が判るのがいいです。 チクッと、自前のプロシージャの基本形を作ったがいいです。 質問は、全体を正常化してからがいいです。 Private Sub バックアップ開始_Click() On Error GoTo Err_バックアップ開始_Click   Dim Answer   As Integer   If Len(Me.バックアップ日付 & "") = 0 Then     Message "バックアップ日付をyyyymmdd形式で入力してください。"     Me.バックアップ日付.SetFocus   ElseIf FileExists(strFileName) Then     Answer = Verify(strFileName & "は存在します。上書しますか?")     If Answer = vbYes Then       FileCopy "C:\Data\在庫管理.mdb", _            "C:\Backup\" & Format(Me.日付, "yyyymmdd") & "StockData.mdb"       Message "バックアップが完了しました。"     End If   End If Exit_バックアップ開始_Click:   Exit Sub Err_バックアップ開始_Click:   ErrMsg Err.Description & "(バックアップ開始_Click)"   Resume Exit_バックアップ開始_Click End Sub

回答No.1

「実行されません」とは何を指して言っているのでしょうか。 ---------------------------------------------- strBaseName にも strFileName にもファイル名がフルパスで入っているのに FileCopy strBaseName, strFileName の行を実行してもファイルがコピーされない ---------------------------------------------- ってことでしょうか? ステップ実行で処理の過程を 1行ずつ確認してみましたか? エラーが発生した場合のジャンプ先 "LBL_ERROR:" で何もしないですぐに "LBL_EXIT:" に移動させちゃってるんでエラーに気づいてないってことはありませんか? On Error GoTo LBL_ERROR の行をコメントアウトして試してみるとか、 LBL_ERROR: Debug.Print Err.Description Resume LBL_EXIT ってしてみてエラーを確認してみてはどうでしょうか。