VBA - 删除所有工作簿但处于活动状态,然后关闭(并且不保存)活动工作簿

时间:2017-11-06 07:31:08

标签: excel vba excel-vba delete-file kill

我需要找到一种删除所有excel工作簿的方法,但是在满足某些条件后才能删除活动工作簿。我是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

if条件运行良好,但是VBA似乎在kill命令方面遇到了困难,这让我很困惑,因为“kill”部分在没有置于If Not条件之内时工作正常。

非常感谢您提供的任何建议。

祝你好运, Maritn

1 个答案:

答案 0 :(得分:1)

如果您只想关闭所有工作簿但活动工具簿,可以使用我粘贴的代码:

$trend_words = json_decode($file, true);
$aggregations = $trend_words['aggregations'];
$buckets =$aggregations[2]['buckets'][0];

如果您希望关闭除了内置此宏的工作簿之外的所有工作簿,请将ActiveWorkbook替换为ThisWorkbook。其他的是删除所有文件。这显然是冒险操作,因此我建议将其限制在特定文件夹中。碰巧我有一个这样的子程序,见:

Dim wb As Workbook

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

要清理的文件夹的路径是特定的单元格,您可以根据需要将其放在其他位置。它不会删除打开的工作簿,如果你想避免错误消息,只需使用On Error Resume Next。 所以,我的建议是先关闭所有工作簿,然后删除关闭。