2017-11-06 6 views
0

일부 조건이 충족되면 모든 Excel 통합 문서를 삭제하는 방법을 찾아야하지만 활성 통합 문서는 삭제해야합니다. 나는 VBA를 처음 사용하기 때문에 여기에 아주 기본적인 문제가있을 수 있습니다. (하지만 비슷한 질문은 여기에서 찾을 수 없습니다.) 조건이 잘 작동하지만, VBA는 "살인"부분부터 나를 혼란 kill 명령 가진 어려움이있을 것 같습니다하지 않을 경우의 내부에 넣지 때 완벽하게 작동하는지VBA - 모든 통합 문서를 삭제하지만 활성 상태 인 다음 활성 상태를 닫고 저장하지 마십시오

Sub kill() 

Dim wb    As Workbook 
Dim A    As String 

A = 2 
If A = 1 Then 
MsgBox "Everything is fine" 
'The if condition is working just fine 
Else 
    Application.DisplayAlerts = False 
    For Each wb In Application.Workbooks 
     If Not (wb Is Application.ActiveWorkbook) Then 
       Application.DisplayAlerts = False 
       If wb.Path <> vbNullString Then 
        wb.ChangeFileAccess vbNormal 
        kill (wb.FullName) 
       End If 
       ThisWorkbook.Close SaveChanges:=False 
     End If 
    Next 
End If 
End Sub 

: 여기 내 코드는 조건.

제공해 주신 의견을 보내 주셔서 감사합니다.

안부, Maritn

+0

Kill 명령은 파일을 삭제하는 데 사용됩니다. 'wb.Close SaveChanges : = False' –

+1

VBA가 매개 변수 ('kill (wb.FullName)')를 사용하여 서브 루틴을 호출하도록하면 혼란 스럽습니다. 당신의 서브 루틴이 매개 변수를 필요로한다고 지정했습니다 ('Sub kill()'). (자신의 변수 및/또는 프로 시저의 이름으로 VBA 함수/키워드를 사용하지 마십시오.) – YowE3K

+0

열린 파일에서 kill이 작동하지 않습니다. 통합 문서를 삭제하기 전에 닫아야합니다. – h2so4

답변

1

그냥, 내가 아래에 붙여 넣기 코드를 사용할 수있는 모든 통합 문서 있지만 활성을 닫아야 할 경우 오히려 원하는 경우를 제외한 모든 통합 문서를 닫습니다

Dim wb As Workbook 

For Each wb In Application.Workbooks 
    If wb.Name <> ActiveWorkbook.Name Then 
     wb.Save 
     wb.Close 
    End If 
Next wb 

을 이 매크로가 안에있는 매크로 중 하나를 선택하고 ActiveWorkbook을 ThisWorkbook으로 바꿉니다. 다른 것은 모든 파일을 삭제하는 것입니다. 이는 명백히 위험한 작업이므로 특정 폴더로 제한하는 것이 좋습니다.

Sub DeleteFilesFromFolder() 

Dim myPath 



myFolder = Sheets("Main").Range("B4").Value 

Set Fso = CreateObject("Scripting.FileSystemObject") 
For Each Filename In fldr.Files 
    Filename.Delete True ' delete all files 
Next 
End Sub 

청소하는 폴더의 경로는 특정 세포, 당신이 원하는대로 당신이 다른 곳을 넣을 수 있습니다 : 그것은 내가 이런 종류의 하나 개의 서브 루틴을 가지고, 참조 일어났다. 열린 통합 문서를 삭제하지 않습니다. 오류 메시지를 피하려면 On Error Resume Next를 사용하십시오. 제 제안은 먼저 모든 통합 문서를 닫은 다음 삭제를 완료하는 것입니다.

관련 문제