除非手动打开,否则工作簿不会关闭VBA

时间:2017-07-14 13:08:49

标签: excel-vba vba excel

我有一个用VBA打开的工作簿,修改了工作簿,然后关闭了工作簿。到目前为止我所拥有的是:

 Sub OpenandModify()
 application.screenupdating = false
 workbooks.open Filename:="FilePath\WkbkName.xlsm"

*Modify Workbook 


Workbooks("WkbkName.xlsm").close SaveChanges:=True
application.screenupdating = true
End Sub()

如果我在工作簿已经打开的情况下运行宏,则宏可以正常工作并关闭上面提到的工作簿。但是,如果工作簿尚未打开,则修改后文件仍保持打开状态(注意,修改发生,因此我认为这不是Workbook.Open的问题)。有任何想法吗?

提前致谢。

2 个答案:

答案 0 :(得分:0)

在我的工作簿上玩了更多。我似乎找到了这个问题。在修改代码部分,我有另一个子例程,它添加一个不同于WkbkName.xlsm的工作簿的工作表。如果工作表已存在,则会将其添加为Sheet(2),并且工作簿将不会关闭。如果工作表不存在,则工作簿将打开并正确修改并关闭。我仍然不明白为什么它会这样,所以如果有人有任何想法,将不胜感激。

现在,我只是计划为重复的工作表添加一个检查,如果发生则退出子。

答案 1 :(得分:0)

您遇到的一些问题可能是由于代码与其正在处理的工作簿混淆。

使用变量来保存对工作簿的引用,并在整个代码中仅使用该引用:

 Sub OpenandModify()

    Dim wrkBk As Workbook

    Application.ScreenUpdating = False
    'Open the workbook and assign it to wrkBk variable.
    Set wrkBk = Workbooks.Open(Filename:="FilePath\WkbkName.xlsm")

    'Modify Workbook
    With wrkBk
        .Worksheets("Sheet1").Range("A1") = "Modified!"
    End With

    wrkBk.Close SaveChanges:=True
    Application.ScreenUpdating = True

End Sub