[vba] VBA에서 파일 삭제

VBA를 사용하여 다음을 수행 할 수 있습니다.

  1. 파일이 존재하는지 테스트하고 존재한다면
  2. 삭제 하시겠습니까?


답변

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

다시 말하지만, 오류 처리는 여러분에게 맡기고 다음과 같은 사항을 고려해야합니다.

  • 디렉토리와 파일에 대해 다르게 동작해야합니까? 사용자가 디렉토리를 삭제할 것인지 명시 적으로 표시해야합니까?

  • 코드가 읽기 전용 속성을 자동으로 재설정하도록 하시겠습니까? 아니면 사용자에게 읽기 전용 속성이 설정되어 있다는 표시를 받아야합니까?


편집 :이 답변을 커뮤니티 위키로 표시하여 필요한 경우 누구나 수정할 수 있습니다.


답변

Brettski의 답변을 코딩하는 다른 방법은 내가 그렇지 않으면 완전히 동의하는 것입니다.

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

효과는 같지만 변수 선언은 적습니다.

FileSystemObject는 정말 유용한 도구이며 친숙해질 가치가 있습니다. 다른 것 외에도 텍스트 파일 작성의 경우 실제로 때로는 레거시 대안보다 빠를 수 있으며 이는 일부 사람들을 놀라게 할 수 있습니다. (내 경험으로는 적어도 YMMV).


답변

나는 아마도 이것에 대해 화를 낼 것입니다. 그러나 당신이 그것을 삭제하려는 경우 존재 여부를 테스트하는 요점은 무엇입니까? 내 주요 애완 동물 중 하나는 “파일을 삭제할 수 없습니다. 존재하지 않습니다!”와 같은 오류 대화 상자를 표시하는 앱입니다.

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.

파일이 처음에 존재하지 않으면 임무 완수!


답변

다음을 사용하여 파일의 존재 여부를 테스트 한 다음 삭제할 수 있습니다.

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


답변

VB에서는 일반적으로 Dir파일의 디렉토리를 찾습니다. 비어 있지 않으면 존재하고 Kill파일을 제거하는 데 사용합니다.

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


답변

Scripting.Runtime 라이브러리에 대한 참조를 설정 한 다음 FileSystemObject를 사용합니다.

Dim fso as New FileSystemObject, aFile as File

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


답변

여기에 팁이 있습니다. 파일 이름을 재사용하고 있습니까? 아니면 즉시 삭제해야하는 작업을 수행 할 계획입니까?

아니?

VBA.Shell을 사용하여 명령 프롬프트에서 DEL “C : \ TEMP \ scratchpad.txt”/ F 명령을 비동기 적으로 실행하도록 VBA를 가져올 수 있습니다 .

쉘 “DEL”& chr (34) & strPath & chr (34) & “/ F”, vbHide

파일 이름 주위에 큰 따옴표 (ASCII 문자 34)가 있습니다. 네트워크 경로가 있거나 공백이 포함 된 긴 파일 이름이 있다고 가정합니다.

파일이 크거나 네트워크 연결이 느린 경우에는 즉시 실행을 중지하는 것이 좋습니다. 물론 이것이 효과가 있는지 여부를 결코 알 수 없습니다. 그러나 VBA를 즉시 다시 시작하고 이것이 네트워크를 기다리는 것보다 나은 경우가 있습니다.