2010-07-24 76 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。你的代码工作完美。对不起,我花了这么长时间来研究这个问题。另外,我不清楚这是否是对您的良好解决方案作出回应的方式。我是这个网站的新手。想要赞同你俩。 格兰特