【发布时间】:2023-03-23 18:13:01
【问题描述】:
我在 Windows 10 上使用 MS Access 2013。
我正在尝试打开磁盘上的 Excel 文件,更改列格式和一些列,保存并退出。
Sub 运行,但在.Quit 命令之后,“EXCEL.EXE”继续运行,随后对该 Sub 的调用将导致运行时错误。
如果我关闭 Access,“EXCEL.EXE”会在任务管理器中消失,但如果我执行“压缩和修复”数据库则不会。
我有另一个 Sub,它在磁盘上打开一个 Excel 文件并将所有列的宽度更改为“自动宽度”,然后关闭,这不会让“EXCEL.EXE”继续运行。
我在 Dims 和 Sets to Nothing、Workbook Closes 等上尝试了不同的线路顺序。
我在这里和其他网站上搜索过。 VBA 的唯一建议是使用类似ThisWorkbook.Saved = True 的东西。我在.Quit 之前和之后都试过了,但没有效果。
除此之外,我只找到 VB.NET 或其他环境的解决方案。
Sub changeXLcolumnFormatting()
Dim XL As Object
Set XL = CreateObject("Excel.Application")
XL.Visible = False
XL.DisplayAlerts = False
XL.Workbooks.Open "C:\Users\640344\Desktop\rawDataTest.XLSX"
Dim sht As Worksheet
With XL
Set sht = ActiveWorkbook.Worksheets(1)
Dim rng As Range
Dim i As Integer, j As Integer
field_names = Split("datasistema|Data de Registo|Data Registo CMVM", "|")
sht.Select
end_of_table = sht.UsedRange.Columns.Count
For j = 0 To UBound(field_names)
For i = 1 To end_of_table
Set rng = sht.Cells(1, i)
If InStr(rng.Text, field_names(j)) > 0 Then
sht.Columns(i).NumberFormat = "yyyy-mm-dd HH:MM:ss"
End If
Next i
Next j
End With
Set rng = Nothing
Set sht = Nothing
XL.ActiveWorkbook.Close (True)
XL.Quit
Set XL = Nothing
End Sub
【问题讨论】:
-
您确定在启动宏之前没有任何其他
Excel在运行吗? -
您可以尝试通过添加
Application.Quit而不是XL.Quit来看看它是如何工作的。 -
也尝试在关闭之前明确保存更改的工作簿
-
将命令 Application.Quit 放在关闭命令之后
-
@Vityata:是的,在 Access 中运行 Sub 之前,Excel.exe 没有运行,也没有显示在任务管理器中。使用 Application.Quit 退出 MS Access,这是不需要的。不过,这确实使“EXCEL.EXE”从任务管理器中消失,这是有道理的,因为我的 Sub 不正确,因为 Access 没有正确关闭 Excel。