访问VBA - 关闭Excel对象

时间:2016-04-16 11:32:21

标签: vba excel-vba access-vba excel

我有一些代码可以将子表单结果导出到Excel工作簿。代码工作正常,只有一个小问题。如果我导出,excel文件打开如果用户想要我打开。当打开此Excel文件并且用户想要再次执行导出时,我收到错误1004。

产生此错误是因为文件已打开,而新的Excel对象希望保存具有相同名称的文件。我想要的是当发生这种情况时,只需取消所有内容并让用户知道他必须先关闭此先前创建的工作簿。这是我试过的:

If Err.Number = 1004 Then

MsgBox "Error. You have opened Excel file, that has same name as this file name should be. Please close that file first !", vbCritical

 Cancel = True

 Set wb = Nothing ' wb is wb=XcelFile.Workbooks.Add

 Set XcelFile = Nothing ' Xcelfile is Xcelfile= New Excel.Application

End If

此代码有效,当用户关闭该文件时,可以执行导出 - 旧文件被覆盖。问题是Excel应用程序仍在Windows任务管理器中打开,因此Excel对象未正确关闭。

有人有更好的解决方案吗?

P.S。:我尝试在Excel的文件名中包含数字,因此它不会是同一个名字,但我无法修复它。

编辑:以下是我尝试更改文件名的方法

   Dim i as Integer

       ExcelFilename = "RESULTS_" & Format(Date, "dd/mm/yyyy") & "_" & i & "_" & ".xlsx"

 i = i + 1
当我再次运行代码时,“我”不会改变它的值。我怎样才能增加它?这可以解决我的问题...

2 个答案:

答案 0 :(得分:1)

我建议一个简单的解决方案:将时间添加到文件名以防止冲突。

ExcelFilename = "RESULTS_" & Format(Now(), "yyyy-mm-dd_hh-nn-ss") & ".xlsx"

对于一个只要应用程序正在运行就会递增的数字,请尝试

Static i As Integer

Static variables

答案 1 :(得分:0)

您必须非常严格地打开Excel对象并以反向顺序关闭它们 - 如本示例所示:

Public Sub RenameWorkSheet()

    Dim xls     As Excel.Application
    Dim wkb     As Excel.Workbook
    Dim wks     As Excel.Worksheet

    Set xls = New Excel.Application
    Set wkb = xls.Workbooks.Open("c:\test\workbook1.xlsx")
    Set wks = wkb.Worksheets(1)

    wks.Name = "My New Name"
    wkb.Close True

    Set wks = Nothing
    Set wkb = Nothing

    xls.Quit

    Set xls = Nothing

End Sub