我有一些代码可以将子表单结果导出到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
当我再次运行代码时,“我”不会改变它的值。我怎样才能增加它?这可以解决我的问题...
答案 0 :(得分:1)
我建议一个简单的解决方案:将时间添加到文件名以防止冲突。
ExcelFilename = "RESULTS_" & Format(Now(), "yyyy-mm-dd_hh-nn-ss") & ".xlsx"
对于一个只要应用程序正在运行就会递增的数字,请尝试
Static i As Integer
答案 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