2010-07-24 6 views
0

모든 버전의 Kill 루틴을 사용하여 현재 디렉토리의 xls 파일을 삭제하지 않았습니다. 여기 내 코드가있다. wbCntl을 제외한 모든 xls 파일을 삭제하고 싶습니다. 이 코드를 살펴보면 Kill swb 명령을 제외한 모든 것이 작동한다는 것을 알 수 있습니다.xls 파일을 삭제할 수 없습니다.

'Close all files except wbCntl 
     swb1 = wbCntl.Name 
     For Each wb In Application.Workbooks 
      swb = wb.Name 
      If swb <> swb1 Then 
       Workbooks(swb).Close SaveChanges:=False 
       On Error Resume Next 
       Kill swb 
       Err.Clear 
      End If 
     Next wb 

사람이 내가 Application.Workbooks 당신이 원하는 것을 생각하지 않는다이

답변

0

나를 도울 수 (SWB 문자열로 정의 된 대중이다). The Excel 2003 VBA help이 컬렉션에 다음과 같은 의미를 부여 :

현재 Microsoft Excel에서 응용 프로그램에 열려있는 모든 Workbook 개체의 컬렉션을.

그러나 현재 디렉토리에서 Excel 파일을 반복하고 싶습니다. 이는 매우 다른 것입니다.

저는 Excel VBA 전문가는 아니므로 확인하지 말고 내 말을 듣지 마십시오. VBA에서 자유롭게 파일을 삭제할 수는 없다고 상상할 수 있습니다. 스프레드 시트 문서에서 그러한 것들은 많은 사람들에 의해 위험한/잠재적 인 보안 위협/바이러스로 간주 될 것입니다.

+1

내가 왜 묻는다면 왜 downvote? (대답에 문제가있는 경우 수정하거나 개선하기 위해 최선을 다할 것입니다.) – stakx

+0

동의 - 초기 질문은 현재 열려있는 xls 파일 만 삭제해야한다는 언급이 없습니다. 이것이 의미하는 것이라면 초기 질문을 수정해야합니다. –

0

이름 속성이 파일 이름이기 때문에 작동하지 않습니다. Kill 메서드는 전체 경로가 필요합니다. 대신 FullName 속성을 사용해보십시오.

"For Each"를 사용하여 반복하는 컬렉션에서 항목을 삭제할 때도 이상하게 작동 할 수 있습니다. 이것을 시도하십시오 :

Public Sub Example() 
    Dim lngIndx As Long 
    Dim strFilePath As String 
    For lngIndx = Excel.Workbooks.Count To 1& Step -1 
     strFilePath = Excel.Workbooks(lngIndx).FullName 
     If strFilePath <> ThisWorkbook.FullName Then 
      Excel.Workbooks(lngIndx).Close False 
      SafeKill strFilePath 
     End If 
    Next 
End Sub 

Private Sub SafeKill(ByVal path As String) 
    On Error Resume Next 
    Kill path 
End Sub 
0

stakx와 특히 Oorang 덕분에. 코드가 완벽하게 작동했습니다. 죄송합니다.이 일을하는 데 너무 오래 걸렸습니다. 또한, 당신의 좋은 해결책에 응답하는 방법이 명확하지 않습니다. 나는이 사이트에서 새로운 사람이다. 둘 다 당신에게 엄지 손가락을주고 싶습니다. 부여

관련 문제