it-swarm-ko.tech

VBA에서 파일 삭제

VBA를 사용하여 어떻게 할 수 있습니까?

  1. 파일이 존재하는지 테스트하고 존재하는 경우
  2. 삭제 하시겠습니까?
113
inglesp

1.) 여기 를 확인하십시오. 기본적으로 이렇게하십시오 :

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

다시, 나는 오류 처리를 당신에게 남겨두고 다시 고려할 것들입니다.

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

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


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

157
Onorio Catenacci

Brettski의 답변을 코딩하는 다른 방법은 다른 방법으로 동의하는 것입니다.

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

효과는 동일하지만 변수 선언은 적습니다.

FileSystemObject는 정말 유용한 도구이며 친숙해질 가치가 있습니다. 텍스트 파일 작성의 경우 다른 것 외에도 실제로는 기존의 대안보다 더 빠를 수 있습니다. (내 경험으로는 적어도 YMMV).

50
Mike Woodhouse

아마 이것에 대해 화를 낼지 모르지만, 당신이 그것을 삭제하려고한다면 존재를 테스트하는 요점은 무엇입니까? 내 주요 애완 동물 친구 중 하나는 "파일을 삭제할 수 없습니다, 존재하지 않습니다!"와 같은 오류 대화 상자를 표시하는 앱입니다.

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.

파일이 처음에 존재하지 않으면 임무가 완료된 것입니다!

13
JohnFx

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

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

VB에서 파일의 디렉토리를 찾기 위해 일반적으로 Dir입니다. 비어 있지 않으면 존재하고 Kill을 사용하여 파일을 제거하십시오.

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

Scripting.Runtime 라이브러리에 대한 참조를 설정 그런 다음 FileSystemObject를 사용하십시오.

Dim fso as New FileSystemObject, aFile as File

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

팁은 다음과 같습니다. 파일 이름을 재사용하거나 즉시 삭제해야하는 작업을 계획하고 있습니까?

아니?

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

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

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

파일 크기가 크거나 네트워크 연결 속도가 느리면 화재를 잊어 버리는 것이 좋습니다. 물론, 이것이 작동하는지 여부를 알 수 없습니다. 그러나 VBA를 즉시 재개하면 네트워크를 기다리는 것보다 좋은 경우가 있습니다.

3
Nigel Heffernan

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

MSDN 기사 here 를 참조하십시오.

2
Darrel Miller