- 締切済み
以下の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です。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- bonaron
- ベストアンサー率64% (482/745)
FileCopy は 開かれている mdb のコピーはできません。 もし、"C:\Data\在庫管理.mdb" が 今、開いているこのファイル、 または、開かれている他のファイルなら FileSystemObject の CopyFile メソッドを使えばコピーすることができます。 http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/script56/html/jsmthcopyfile.asp
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
全体のプロシージャの構造がいけません。 次は、私流の書き方です。 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
- temtecomai2
- ベストアンサー率61% (656/1071)
「実行されません」とは何を指して言っているのでしょうか。 ---------------------------------------------- strBaseName にも strFileName にもファイル名がフルパスで入っているのに FileCopy strBaseName, strFileName の行を実行してもファイルがコピーされない ---------------------------------------------- ってことでしょうか? ステップ実行で処理の過程を 1行ずつ確認してみましたか? エラーが発生した場合のジャンプ先 "LBL_ERROR:" で何もしないですぐに "LBL_EXIT:" に移動させちゃってるんでエラーに気づいてないってことはありませんか? On Error GoTo LBL_ERROR の行をコメントアウトして試してみるとか、 LBL_ERROR: Debug.Print Err.Description Resume LBL_EXIT ってしてみてエラーを確認してみてはどうでしょうか。