130

VBA を使用して、次のことができます。

  1. ファイルが存在するかどうかをテストし、存在する場合は、
  2. 消して?
4

9 に答える 9

191

1.) こちらをご確認ください。基本的にこれを行います:

Function FileExists(ByVal FileToTest As String) As Boolean
   FileExists = (Dir(FileToTest) <> "")
End Function

必要なさまざまなエラー処理を理解するのはあなたに任せますが、これらは私が検討しているエラー処理の一部です。

  • 空の文字列が渡されているかどうかを確認します。
  • ファイル名/パスに不正な文字を含む文字列をチェックします

2.) ファイルを削除する方法。これを見てください 基本的には Kill コマンドを使用しますが、ファイルが読み取り専用になる可能性を考慮する必要があります。ここにあなたのための機能があります:

Sub DeleteFile(ByVal FileToDelete As String)
   If FileExists(FileToDelete) Then 'See above          
      ' First remove readonly attribute, if set
      SetAttr FileToDelete, vbNormal          
      ' Then delete the file
      Kill FileToDelete
   End If
End Sub

繰り返しますが、エラー処理はあなたに任せます。これらは私が考慮したいことです:

  • これは、ディレクトリとファイルで異なる動作をする必要がありますか? ユーザーは、ディレクトリを削除したいことを明示的に示す必要がありますか?

  • コードで読み取り専用属性を自動的にリセットするか、または読み取り専用属性が設定されていることをユーザーに何らかの形で示す必要がありますか?


編集:この回答をコミュニティ wiki としてマークして、必要に応じて誰でも変更できるようにします。

于 2008-09-15T23:12:17.560 に答える
58

ブレットスキーの答えをコーディングする別の方法は、それ以外の場合は完全に同意する可能性があります

With New FileSystemObject
    If .FileExists(yourFilePath) Then
        .DeleteFile yourFilepath
    End If
End With

効果は同じですが、変数宣言が少なくなります (つまり、まったくありません)。

FileSystemObject は非常に便利なツールであり、慣れる価値があります。他の何よりも、テキスト ファイルの書き込みについては、実際には従来の代替方法よりも高速な場合があり、これに驚く人もいるかもしれません。(少なくとも私の経験では、YMMV)。

于 2008-09-16T11:03:40.580 に答える
16

私はおそらくこれに怒りを覚えるでしょうが、あなたがそれを削除しようとしているのであれば、存在をテストするポイントは何ですか?私の主なペットのおしっこの1つは、「ファイルを削除できませんでした。存在しません!」などのエラーダイアログをスローするアプリです。

On Error Resume Next
aFile = "c:\file_to_delete.txt"
Kill aFile
On Error Goto 0
return Len(Dir$(aFile)) > 0 ' Make sure it actually got deleted.

そもそもファイルが存在しない場合、ミッションは達成されました!

于 2008-09-15T23:34:22.953 に答える
12

以下は、ファイルの存在をテストしてから削除するために使用できます。

Dim aFile As String
aFile = "c:\file_to_delete.txt"
If Len(Dir$(aFile)) > 0 Then
     Kill aFile
End If 
于 2008-09-15T23:12:09.917 に答える
8

VB では、通常Dir、ファイルのディレクトリを検索します。空白でない場合は存在しKill、ファイルを削除するために使用します。

test = Dir(Filename)
If Not test = "" Then
    Kill (Filename)
End If
于 2008-09-15T23:11:17.703 に答える
6

Scripting.Runtimeライブラリへの参照を設定してから、FileSystemObjectを使用します。

Dim fso as New FileSystemObject, aFile as File

if (fso.FileExists("PathToFile")) then
    aFile = fso.GetFile("PathToFile")
    aFile.Delete
End if
于 2008-09-15T23:40:20.660 に答える
4

ここにヒントがあります。ファイル名を再利用していますか、それともすぐに削除する必要があることを計画していますか?

いいえ?

VBA.Shell を使用して、コマンド プロンプトからコマンド DEL "C:\TEMP\scratchpad.txt" /F を非同期的に起動するように VBA を取得できます。

シェル "DEL " & chr(34) & strPath & chr(34) & " /F ", vbHide

ファイル名が二重引用符 (ASCII 文字 34) で囲まれていることに注意してください。ネットワーク パス、またはスペースを含む長いファイル名があると想定しています。

ファイルが大きい場合、またはネットワーク接続が低速の場合は、ファイア アンド フォーゲットが最適です。もちろん、これが機能したかどうかを確認することはできません。ただし、VBA をすぐに再開すると、ネットワークを待つよりもこの方がよい場合があります。

于 2014-10-02T17:09:17.557 に答える
2

Scripting.Runtime ライブラリへの参照を設定してから、FileSystemObject を使用できます。これには、DeleteFile メソッドと FileExists メソッドがあります。

こちらの MSDN 記事を参照してください。

于 2008-09-15T23:12:37.060 に答える