在MS Access中,我正在编写一小段代码以将行插入.xlsx文件中。两个文件都是本地的。代码运行时没有错误,但是,每次运行时,它都会使.xlsx文件无法读取。这是一个步骤:
(1)我有简单的.xlsx文件(几百行,十几列,一些格式,没有特殊功能或嵌入式VBA)。
(2)我可以在Excel中打开并查看该文件 - 但我确保在运行代码之前将其关闭。
(3)在MS Access中运行以下代码。
(4)代码执行没有错误。 debug.print按预期执行并打印出单元格(1,1)的内容。
(5)我在MS Excel中重新打开.xlsx文件,但Excel现在无法打开它。 Excel本身会打开,但是,如果没有打开文件,它将保持完全空白。没有错误。
(6)如果我使用Office365打开文件(通过网络前端),则会出现以下错误:
“我们无法打开此工作簿。它设置为仅显示某些命名项目,但它们不在工作簿中。”
我可以很容易地恢复文件,但每次都会出现相同的行为(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
有人可以重现这种尴尬的行为吗?
答案 0 :(得分:2)
请尝试使用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的任何延迟隐藏副本。