AccessにてCSVファイルをインポートしたあと、所定の場所にインポート済みファイルを移動させる処理をさせています。
インポート済みのファイルと同じ名前のファイル(このファイルはyyyymmdd.csvと日付を基にしたファイル名称になっています)を取り込もうとしたときに、メッセージボックスを表示させて処理を続行するかどうか問わせたいと考えています。
下記のようにVBAを記述してみたのですが、メッセージボックスは表示されず、インポート処理されてしまいます。
If strFile = strImportedFile Then
という、条件がまずいのではないかと思っているのですが、目的に適した記述が思いつきません。
どのような記述がふさわしいでしょうか?
~~~現在の記述~~~
Dim strFile As String
Dim strPath As String
Dim strImportedFile As String
strPath = CurrentProject.Path & "\インポート\"
strFile = Dir(strPath & "*.csv")
strImportedFile = strPath & "インポート済\" & strFile
If strFile = strImportedFile Then
MsgBox "すでに処理済の日付のファイルです。" & (Chr(13) & Chr(10)) & "続けますか?", vbOKCancel
Exit Sub
Else
Kill strImportedFile
End If
DoCmd.SetWarnings False
'受け皿になるテーブルをクリアーしてインポート
If strFile <> "" Then
DoCmd.RunSQL "DELETE * FROM tbl_import"
DoCmd.TransferText acImportDelim, "インポート定義", "tbl_import", strPath & strFile, True
Name strPath & strFile As strPath & "インポート済\" & strFile
End If
DoCmd.SetWarnings True
'取り込むべき売上ファイルがない場合のためのアラート表示
If strFile = "" Then
MsgBox "CSVファイルがありません。" & (Chr(13) & Chr(10)) & "処理を中止します", vbOKOnly
Else
Exit Sub
End If
End Sub
そりゃあ、"○○.csv”と、"C:\hogehoge\インポート\インポート済み\○○.csv"を比較したら絶対に一致しませんよ。
以下の様で良いかと(動作未確認)
If strFile = strImportedFile Then
↓
If strFile = Dir(strImportedFile) then
お礼
「= vbCancel」が抜けてましたね。 お手数をおかけしました。 疑問にお答えいただきありがとうございます。
補足
該当するファイルが「インポート済」フォルダにある場合、メッセージが表示されるようになりました。キャンセルを選択すると処理が中止されます。 しかし、OKをクリックして処理を続行選択すると、ファイルの削除も、のちの処理であるインポートもされません。 If~Then~Elseの記述がまずいのでしょうか? また、ファイルが重複しない状況を作って実行させると、「実行時エラー'53' ファイルが見つかりません」 とメッセージが出て、「デバッグ」ボタンをクリックすると、 「Kill strImportedFile」 が、黄色く網かけされて表示されます。 これもIf~Then~Elseの記述がまずいからなのでしょうか?