2010-07-24 104 views
0

我一直在使用Kill例程的每個版本刪除當前目錄中的xls文件,但沒有成功。這是我的代碼。我想刪除除wbCntl之外的每個xls文件。單步執行此代碼表明,除了Kill swb命令外,所有內容都可以工作。 (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 

誰能幫我這個

回答

0

我不認爲Application.Workbooks是你想要的。 The Excel 2003 VBA help給出以下含義此集合:

所有Workbook 對象是目前在 Microsoft Excel應用程序打開的集合。

但是,您希望遍歷當前目錄中的Excel文件,這與此非常不同。

我絕不是一個Excel VBA專家,所以不要僅僅因爲這個而不加以檢查,而是:我可以想象,你不能只是從VBA中隨意刪除文件,因爲包含一個宏電子表格文件中的這些內容將被許多人視爲危險/潛在的安全威脅/病毒。

+1

爲什麼downvote,如果我可能會問? (如果答案有問題,我會盡我所能糾正或改進它。) – stakx 2010-07-24 22:26:05

+0

同意 - 最初的問題沒有提及它應該只刪除當前打開的xls文件。如果確實如此,那麼應該修改最初的問題。 – 2010-07-25 21:39:54

0

這不起作用,因爲Name屬性只是文件名。殺死方法需要完整路徑。嘗試使用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。你的代碼工作完美。對不起,我花了這麼長時間來研究這個問題。另外,我不清楚這是否是對您的良好解決方案作出迴應的方式。我是這個網站的新手。想要贊同你倆。 格蘭特