使用MS Access VBA将行插入.xlsx文件...如何避免破坏文件?

时间:2017-05-25 20:13:41

标签: excel vba ms-access ms-access-2016

在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

有人可以重现这种尴尬的行为吗?

1 个答案:

答案 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的任何延迟隐藏副本。