答えて
1.)hereをチェックします。基本的には次の操作を行います。
Function FileExists(ByVal FileToTest As String) As Boolean
FileExists = (Dir(FileToTest) <> "")
End Function
私は必要なさまざまなエラー処理を把握するためにあなたにそれを残しておきますが、これらはエラー処理の事、私は考えることだろう間にある:
- チェックを空にするために文字列が渡されます。
- ファイルを削除する方法をファイル名に不正な文字を含む文字列/パス
2)を確認してください。 this.を参照してください。基本的に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
、私はあなたにエラー処理を残しておきますと、再びこれらは、私は検討したいものです。 ファイル?ユーザーは明示的にディレクトリを削除する必要があることを示す必要がありますか?
読み取り専用属性を自動的にリセットするようにするか、ユーザーに読み取り専用属性が設定されていることを通知する必要がありますか?
EDIT:必要であれば誰もがそれを修正することができるようにコミュニティのwikiとして、この答えをマーク。
VBでは、ファイルのディレクトリを見つけるために通常はDir
です。空白でない場合は存在し、Kill
を使用してファイルを削除します。
test = Dir(Filename)
If Not test = "" Then
Kill (Filename)
End If
以下は、ファイルの存在をテストし、それを削除するために使用できます。
Dim aFile As String
aFile = "c:\file_to_delete.txt"
If Len(Dir$(aFile)) > 0 Then
Kill aFile
End If
私はLen()を使って文字列(そして文字列を返す関数)にVBAの文字列比較よりも速いと思われることを追加したいと考えています。 – JimmyPena
'Len()'(と 'LenB()'は文字列の比較より高速です)は、メモリ内でVB文字列の長さが先行しているためです。 Len/LenBはそのメモリ位置から長さを引っ張るだけで、長さを知るために文字列を繰り返す必要はありません。一方、文字列比較を使用すると、はるかに多くの作業が必要になります。さらに、常に新しい文字列を割り当てるので、VBでは '' ''を使わないでください。 'vbNullString'を定数として使用し、より多くのメモリを使用しません。 –
Scripting.Runtimeライブラリへの参照を設定し、FileSystemObjectを使用することができます。これにはDeleteFileメソッドとFileExistsメソッドがあります。
MSDNの記事hereを参照してください。
私はおそらくこのために燃え尽きるでしょうが、もしそれを削除しようとしているのであれば、存在のテストのポイントは何ですか?私の主要なペットのおしっこの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.
ファイルが最初に存在しない場合は、ミッションが達成されます。
あなたは良い点を挙げていますが、大部分のように、文脈に依存していると思いますが、単に「ファイルが存在します」という機能は削除とは別に便利です。 –
+1:おそらく、アプリケーションのユーザーがファイルを削除する前に尋ねたいと思うかもしれません。たとえば、 'ActiveWorkbook.SaveCopyAs'を使って上書きすることができないので、まず同じファイル名で既存のファイルを削除する必要があります。 –
しかし、あなたは 'On Error Resume Next'を使うべきではありません。そう言われました:Dもちろん、それはばかげたアドバイスです。あなたの答えは正しいです。 –
はScripting.Runtimeライブラリへの参照を設定して、FileSystemObjectオブジェクトを使用します。
Dim fso as New FileSystemObject, aFile as File
if (fso.FileExists("PathToFile")) then
aFile = fso.GetFile("PathToFile")
aFile.Delete
End if
私もFileSystemObjectメソッドを使用しています.Killは分音を含むファイル/フォルダを削除できません。 –
私はそう完全に同意したとBrettskiの答えを、コーディングする別の方法を、
With New FileSystemObject
If .FileExists(yourFilePath) Then
.DeleteFile yourFilepath
End If
End With
かもしれません
同じ効果がありますが、(まったくまったくまったく)変数宣言が少なくなります。
FileSystemObjectは本当に便利なツールであり、やりがいを感じる価値があります。それ以外にも、テキストファイルの作成には、実際にはいくつかの人を驚かせるかもしれない従来の方法よりも速い場合もあります。 (少なくとも私の経験では、YMMV)。
ファイルスクリプティングオブジェクトを宣言せずにこの構文を使用する場合は、Microsoft Scripting Runtimeの参照を追加する必要があります。FileSystemObject – pghcpa
また、スクリプトライブラリを参照する必要があります。ここで参照してください:http://stackoverflow.com/questions/3233203/how-do-i-use-filesystemobject-in-vba – ekkis
Nothingに設定する変数がないため、FileSystemObjectがメモリに残る危険性があります。漏れやその他の問題? –
ヒント:ファイル名を再使用していますか、削除をすぐに行う必要があることを計画していますか?
いいえ?
あなたはVBAコマンドDEL "C:\ TEMPの\のscratchpad.txt" 火災に取得することができますVBA.Shellを使用して非同期コマンドからをプロンプトを/ Fを:
シェル "DEL" & CHR(34ファイル名の周り)& strPath & CHR(34)& "/ F"、vbHide
注二重引用符(ASCII文字34):私はあなたがネットワークパスを持っていると仮定し、または長いですよスペースを含むファイル名。
大きなファイルである場合や、低速のネットワーク接続の場合は、ファイアアンドフォースを使用してください。 もちろん、これがうまくいくかどうかは決して分かりません。ただちにVBAを再開すると、ネットワークを待つよりも時間がかかることがあります。
これは素晴らしい選択肢です* if * asynchがあなたの望むものです。 –
- 1. Excel 2003でVBAを使用してVBA
- 2. VBAを使用したgetHTTP?
- 3. VBAを使用してピボットチャートラベルを削除
- 4. vbaを使用して式を使用するExcel
- 5. VBA Excel R1C1セルメソッドを使用した式
- 6. Excel VBA選択したシートを使用
- 7. VBAを使用したLotusNoteアイテムの数
- 8. VBAを使用したMS Access Link Table
- 9. オブジェクトVBAでエラーが発生しました(VBAを使用してIEフォームを送信しています)
- 10. VBAでのORの使用
- 11. vbaエラー13タイプミスマッチ、VBA
- 12. VBAを使用してEXCELでBAPIインポートテーブルパラメータを入力します。
- 13. VBA(インターネットエクスプローラなし)を使用してファイルをダウンロードするには
- 14. ワークブックのプレフィックスとして使用しているVBAアプリケーションワード
- 15. MS AccessでSQLを使用してVBAでキャストしますか?
- 16. VBAマクロスクリプト:VBAマクロを使用してシート1の列内の一意の値をシート2にコピーします。
- 17. VBAを使用して受信メールにカテゴリを追加する
- 18. VBAを使用してExcelワークシートを非表示
- 19. COM Interopを使用してC#からVBAにオブジェクトを渡す
- 20. vbaを使用してPower Queryのテキストを変更
- 21. VBAを使用してスタートアップ表示フォームを設定する
- 22. VBAを使用してセルを非表示
- 23. VBAを使用してExcelでPDFファイルを開く
- 24. 配布キーを使用してexcel-vbaアプリケーションを保護する
- 25. VBAを使用してExcelスプレッドシートにWebページをインポートする
- 26. excel VBAを使用してコマンドプロンプトでコマンドを実行
- 27. VBAでXMLHTTPを使用してフォームデータを送信
- 28. VBAでSFTPを使用してファイルをダウンロードする
- 29. VBAを使用してMS Accessレポートを表示
- 30. VBAを使用してExcelファイルをjpgにエクスポート
ありがとうございます - 存在している同じ名前の2つのファイルがある場合、DeleteFileサブが両方を殺すか、または1つだけを殺すのでしょうか?どんなアドバイスも大歓迎です。 – BKSpurgeon
ディレクトリ内に同じ名前のファイルを2つ持つことはできません。 –
もちろん華麗です! – BKSpurgeon