문제

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가 명령 프롬프트에서 DEL "C: EMP\scratchpad.txt" /F 명령을 실행하도록 할 수 있습니다. 비동기적으로 VBA.Shell 사용:

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

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

파일이 크거나 네트워크 연결이 느린 경우 실행 후 잊어버리는 방법이 좋습니다.물론 이것이 효과가 있는지 없는지는 알 수 없습니다.그러나 VBA를 즉시 재개하면 네트워크를 기다리는 것보다 더 나은 경우가 있습니다.

Scripting.Runtime 라이브러리에 대한 참조를 설정한 다음 FileSystemObject를 사용할 수 있습니다.여기에는 DeleteFile 메서드와 FileExists 메서드가 있습니다.

MSDN 문서를 참조하세요. 여기.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top