使用 MS Access VBA 向 .xlsx 文件中插入一行...如何避免损坏文件?
Using MS Access VBA to insert a row into a .xlsx file... how to avoid corrupting the file?
在 MS Access 中,我正在编写一小段代码以将一行插入 .xlsx 文件。两个文件都是本地的。代码运行时没有错误,但每次运行时,都会使 .xlsx 文件不可读。这是一个步骤:
(1) 我有一个简单的 .xlsx 文件(几百行,十几列,一些格式,没有特殊功能或嵌入 VBA)。
(2) 我可以在 Excel 中打开和查看文件 - 但我确保在 运行 代码之前关闭它。
(3) 运行 下面的代码,在 MS Access 中。
(4) 代码执行没有错误。 debug.print 按预期执行并打印出 cell(1,1).
的内容
(5) 我在 MS Excel 中重新打开 .xlsx 文件,但 Excel 现在无法打开它。 Excel 本身会打开,但仍然完全空白,没有打开的文件。没有错误。
(6) 如果我用Office365打开文件(通过web前端),然后,提示如下错误:
"We can't open this workbook. It's set to show only certain named items, but they aren't in the workbook."
我可以很容易地恢复文件,但每次都会出现相同的行为(5 次,我已经测试过 - 每次都使用略有不同的 .insert 方法)。我的代码中有什么东西导致了这个吗?
Public Function WriteHistoryToExcelFile()
Dim lExcelObj As Excel.Application
Dim lExcelWB As Excel.Workbook, lSheet As Excel.Worksheet
Set lExcelObj = CreateObject("Excel.Application")
Set lExcelWB = GetObject("C:\Users\XXX\OneDrive\AA-Store\Ziggy\Meta History.xlsx")
Set lSheet = lExcelWB.Sheets(1)
Debug.Print lSheet.Cells(1, 1) 'This works correctly
lSheet.Rows(1).Insert
lExcelWB.Save
lExcelWB.Close
Set lExcelWB = Nothing
Set lExcelObj = Nothing
End Function
有人可以重现这种尴尬的行为吗?
不要使用 GetObject
打开工作簿,请尝试使用 Application.Workbooks.Open
方法。并且明确地 Quit
Excel 也是:
Public Function WriteHistoryToExcelFile()
Dim lExcelObj As Excel.Application
Dim lExcelWB As Excel.Workbook, lSheet As Excel.Worksheet
Set lExcelObj = CreateObject("Excel.Application")
Set lExcelWB = lExcelObj.Workbooks.Open("C:\Users\XXX\OneDrive\AA-Store\Ziggy\Meta History.xlsx")
Set lSheet = lExcelWB.Sheets(1)
Debug.Print lSheet.Cells(1, 1) 'This works correctly
lSheet.Rows(1).Insert
lExcelWB.Save
lExcelWB.Close
lExcelObj.Quit
Set lExcelWB = Nothing
Set lExcelObj = Nothing
End Function
您可能还想确保在任务管理器中没有任何挥之不去的、隐藏的 Excel 运行 副本。
在 MS Access 中,我正在编写一小段代码以将一行插入 .xlsx 文件。两个文件都是本地的。代码运行时没有错误,但每次运行时,都会使 .xlsx 文件不可读。这是一个步骤:
(1) 我有一个简单的 .xlsx 文件(几百行,十几列,一些格式,没有特殊功能或嵌入 VBA)。
(2) 我可以在 Excel 中打开和查看文件 - 但我确保在 运行 代码之前关闭它。
(3) 运行 下面的代码,在 MS Access 中。
(4) 代码执行没有错误。 debug.print 按预期执行并打印出 cell(1,1).
的内容(5) 我在 MS Excel 中重新打开 .xlsx 文件,但 Excel 现在无法打开它。 Excel 本身会打开,但仍然完全空白,没有打开的文件。没有错误。
(6) 如果我用Office365打开文件(通过web前端),然后,提示如下错误:
"We can't open this workbook. It's set to show only certain named items, but they aren't in the workbook."
我可以很容易地恢复文件,但每次都会出现相同的行为(5 次,我已经测试过 - 每次都使用略有不同的 .insert 方法)。我的代码中有什么东西导致了这个吗?
Public Function WriteHistoryToExcelFile()
Dim lExcelObj As Excel.Application
Dim lExcelWB As Excel.Workbook, lSheet As Excel.Worksheet
Set lExcelObj = CreateObject("Excel.Application")
Set lExcelWB = GetObject("C:\Users\XXX\OneDrive\AA-Store\Ziggy\Meta History.xlsx")
Set lSheet = lExcelWB.Sheets(1)
Debug.Print lSheet.Cells(1, 1) 'This works correctly
lSheet.Rows(1).Insert
lExcelWB.Save
lExcelWB.Close
Set lExcelWB = Nothing
Set lExcelObj = Nothing
End Function
有人可以重现这种尴尬的行为吗?
不要使用 GetObject
打开工作簿,请尝试使用 Application.Workbooks.Open
方法。并且明确地 Quit
Excel 也是:
Public Function WriteHistoryToExcelFile()
Dim lExcelObj As Excel.Application
Dim lExcelWB As Excel.Workbook, lSheet As Excel.Worksheet
Set lExcelObj = CreateObject("Excel.Application")
Set lExcelWB = lExcelObj.Workbooks.Open("C:\Users\XXX\OneDrive\AA-Store\Ziggy\Meta History.xlsx")
Set lSheet = lExcelWB.Sheets(1)
Debug.Print lSheet.Cells(1, 1) 'This works correctly
lSheet.Rows(1).Insert
lExcelWB.Save
lExcelWB.Close
lExcelObj.Quit
Set lExcelWB = Nothing
Set lExcelObj = Nothing
End Function
您可能还想确保在任务管理器中没有任何挥之不去的、隐藏的 Excel 运行 副本。