Frage

Mit VBA, wie kann ich:

  1. Test, ob eine Datei vorhanden ist, und wenn ja,
  2. löschen?
War es hilfreich?

Lösung

1.) Überprüfen Sie hier . Im Grunde tun:

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

Ich werde es Ihnen überlassen, die verschiedenen Fehler herauszufinden Produkte erforderlichen, aber diese sind unter der Fehlerbehandlung Dinge, die ich in Erwägung ziehen würde:

  • Überprüfen Sie für eine leere Zeichenfolge übergeben wird.
  • Überprüfen Sie für eine Zeichenfolge Zeichen illegal in einem Dateinamen / Pfad
  • enthalten

2.) Wie eine Datei löschen. Schauen Sie sich dies. Im Grunde genommen den Kill-Befehl verwenden, aber Sie müssen die Möglichkeit ermöglichen, die eine Datei schreibgeschützt ist. Hier ist eine Funktion für Sie:

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

Auch hier werde ich die Fehlerbehandlung Sie verlassen und wieder das sind die Dinge, die ich betrachten würde:

  • Sollte dies verhält sich anders für ein Verzeichnis vs. einer Datei? Sollte ein Benutzer explizit angeben müssen, sie wollen ein Verzeichnis löschen?

  • Haben Sie den Code wollen Attribut automatisch zurückgesetzt werden die schreibgeschützt oder sollte der Benutzer eine Art von Hinweis gegeben werden, dass die Nur-Lese-Attribut festgelegt wird?


EDIT: als Community Wiki diese Antwort Kennzeichnung so jeder kann es ändern wenn nötig

.

Andere Tipps

Eine alternative Möglichkeit Brettski Antwort zu codieren, mit dem ich sonst ganz zustimmen, könnte sein,

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

Die gleiche Wirkung, aber weniger (na ja, gar keine) Variablendeklarationen.

Das Filesystem ist ein wirklich nützliches Werkzeug und es lohnt sich immer freundlich mit. Abgesehen von allem anderen, für Textdatei zu schreiben kann tatsächlich manchmal schneller sein als die Legacy-Alternative, die ein paar Leute überraschen kann. (Nach meiner Erfahrung wenigstens, YMMV).

Ich werde wahrscheinlich geflammt dafür bekommen, aber was ist der Punkt, der Prüfung auf Existenz, wenn Sie nur um es zu löschen gehen? Einer meiner großen Haustier ärgert ist eine App, einen Fehlerdialog mit so etwas wie das Werfen „konnte nicht Datei löschen, es existiert nicht!“

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.

Wenn die Datei in erster Linie nicht existiert, Mission! Geführt

Das Folgende kann verwendet werden, um die Existenz einer Datei zu testen, und dann zu löschen.

Dim aFile As String
aFile = "c:\file_to_delete.txt"
If Len(Dir$(aFile)) > 0 Then
     Kill aFile
End If 

In VB seine normalerweise Dir das Verzeichnis der Datei zu finden. Wenn es nicht leer ist, dann existiert es und dann Kill verwenden, um loszuwerden, die Datei zu erhalten.

test = Dir(Filename)
If Not test = "" Then
    Kill (Filename)
End If

ein Verweis auf die Scripting.Runtime Bibliothek gesetzt und dann das Filesystem verwenden:

Dim fso as New FileSystemObject, aFile as File

if (fso.FileExists("PathToFile")) then
    aFile = fso.GetFile("PathToFile")
    aFile.Delete
End if

Hier ein Tipp: Sie sind wieder mit dem Dateinamen oder planen, etwas zu tun, die sofort die Löschung erfordert

Nein?

Sie können VBA erhalten den Befehl DEL abzufeuern "C: \ TEMP \ scratchpad.txt" / F von der Eingabeaufforderung asynchron mit VBA.Shell:

    Shell "DEL" & chr (34) & strPath & chr (34) & "/ F", vbHide

Beachten Sie die doppelten Anführungszeichen (ASCII-Zeichen 34) um die Dateinamen. Ich gehe davon aus, dass Sie einen Netzwerkpfad haben, oder einen Namen lange Datei mit Leerzeichen

Wenn es sich um eine große Datei ist, oder es ist auf eine langsame Verbindung, Feuer und vergessen ist der Weg zu gehen.  Natürlich bekommt man nie, ob das funktioniert oder nicht zu sehen; aber Sie Ihre VBA sofort wieder aufnehmen, und es gibt Zeiten, in denen das ist besser als für das Netzwerk warten.

Sie können einen Verweis auf die Scripting.Runtime Bibliothek festgelegt und dann mit dem Filesystem. Es hat ein DeleteFile Verfahren und eine FileExists Methode.

Sehen Sie die MSDN-Artikel hier .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top