it-swarm-eu.dev

Löschen einer Datei in VBA

Wie kann ich mit VBA:

  1. testen Sie, ob eine Datei vorhanden ist, und wenn ja,
  2. lösche es?
113
inglesp

1.) Markieren Sie hier . Grundsätzlich gilt:

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

Ich überlasse es Ihnen, die verschiedenen erforderlichen Fehlerbehandlungsmethoden zu ermitteln, aber diese gehören zu den Fehlerbehandlungsmethoden, die ich in Betracht ziehen würde:

  • Überprüfen Sie, ob eine leere Zeichenfolge übergeben wird.
  • Suchen Sie nach einer Zeichenfolge mit unzulässigen Zeichen in einem Dateinamen/-pfad

2.) So löschen Sie eine Datei. Schauen Sie sich this. an. Verwenden Sie grundsätzlich den Befehl Kill, aber Sie müssen die Möglichkeit berücksichtigen, dass 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 überlasse ich Ihnen die Fehlerbehandlung und noch einmal die folgenden Dinge, die ich in Betracht ziehen würde:

  • Sollte sich das für ein Verzeichnis anders verhalten als für eine Datei? Muss ein Benutzer explizit angeben, dass er ein Verzeichnis löschen möchte?

  • Soll der Code das schreibgeschützte Attribut automatisch zurücksetzen, oder soll dem Benutzer eine Art Hinweis darauf gegeben werden, dass das schreibgeschützte Attribut festgelegt ist?


BEARBEITEN: Markieren Sie diese Antwort als Community-Wiki, damit jeder sie bei Bedarf ändern kann.

157

Ein alternativer Weg, Brettskis Antwort zu kodieren, dem ich ansonsten vollkommen zustimme, könnte sein

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

Gleicher Effekt, aber weniger (naja, überhaupt keine) Variablendeklarationen.

Das FileSystemObject ist ein wirklich nützliches Tool und es lohnt sich, sich mit ihm vertraut zu machen. Abgesehen von allem anderen kann das Schreiben von Textdateien manchmal sogar schneller sein als die herkömmliche Alternative, was einige Leute überraschen kann. (Nach meiner Erfahrung zumindest YMMV).

50
Mike Woodhouse

Ich werde wahrscheinlich dafür geflammt werden, aber was ist der Sinn der Existenzprüfung, wenn Sie es einfach löschen wollen? Eine meiner Hauptattraktionen ist eine App, die einen Fehlerdialog mit der Meldung "Datei konnte nicht gelöscht werden, existiert nicht!" Auslöst.

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 überhaupt nicht existiert, ist die Mission erfüllt!

13
JohnFx

Mit dem folgenden Befehl können Sie prüfen, ob eine Datei vorhanden ist, und diese anschließend löschen.

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

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

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

Verweis auf die Scripting.Runtime-Bibliothek setzen und dann das FileSystemObject verwenden:

Dim fso as New FileSystemObject, aFile as File

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

Hier ist ein Tipp: Verwenden Sie den Dateinamen erneut oder planen Sie etwas, das sofort gelöscht werden muss?

Nein?

Sie können VBA veranlassen, den Befehl DEL "C:\TEMP\scratchpad.txt"/F über den Befehl Prompt asynchron mit VBA.Shell auszulösen:

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

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

Wenn es sich um eine große Datei handelt oder wenn die Netzwerkverbindung langsam ist, ist Fire-and-Forget der richtige Weg. Natürlich kann man nie sehen, ob dies funktioniert hat oder nicht. Sie können Ihren VBA jedoch sofort wiederaufnehmen. In manchen Fällen ist dies besser, als auf das Netzwerk zu warten.

3
Nigel Heffernan

Sie können einen Verweis auf die Scripting.Runtime-Bibliothek festlegen und dann das FileSystemObject verwenden. Es verfügt über eine DeleteFile-Methode und eine FileExists-Methode.

Siehe den MSDN-Artikel hier .

2
Darrel Miller