【问题标题】:Access VBA - close Excel object访问 VBA - 关闭 Excel 对象
【发布时间】:2020-07-13 20:11:17
【问题描述】:

我有一些用于将子表单结果导出到 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

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

【问题讨论】:

    标签: excel ms-access vba


    【解决方案1】:

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

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

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

    Static i As Integer
    

    Static variables

    【讨论】:

    • 是的,我也对此进行了测试,但我更喜欢数字增量,例如 RESULTS_16_04_2016-1、RESULTS_16_04_2016-2 等。
    【解决方案2】:

    您必须非常严格地打开 Excel 对象并以 reverse 顺序关闭它们 - 就像本示例中所做的那样:

    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
    

    【讨论】:

    • 不,不幸的是,当打开同名的 Excel 文件时,这不起作用。我认为唯一的解决方案是动态更改文件名。但我无法做到这一点,看看我的编辑,你会看到我是如何尝试的。
    • 当然,如果Excel已经打开了文件,就不能再打开了。
    • 是的,但是在重命名文件时,代码可以工作。所以我只需要在文件名中增加一些数字。但我无法为此获得正确的代码,必须执行某种循环。
    猜你喜欢
    • 2021-01-11
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多