求助:Excel.Application未关闭Excel文件,代码无法正常关闭文件
代码无法关闭Excel文件的原因及修复
核心原因:错误处理逻辑跳过了关闭代码
当Find方法找不到指定的size内容时,会触发错误(Err.Number=91,因为Find返回Nothing,访问其.column属性报错),此时代码直接跳转到errhand标签,oBook.Close和oApp_Excel.Quit这两行关闭代码根本不会执行,导致Excel进程残留。
其他次要问题
- 只读打开的工作簿用
oBook.Close True(即保存修改)会触发错误,因为只读文件无法保存,即使设置了DisplayAlerts=False也可能影响进程正常退出。 - 仅释放了
oBook对象,未释放oApp_Excel对象,可能导致Excel进程无法彻底关闭。
修复后的代码方案
方案1:调整错误处理逻辑,确保关闭代码必执行
Function getColumnOfFirstRow(PATH, size) As Long Dim oApp_Excel As Excel.Application Dim oBook As Excel.Workbook Dim column As Long column = 0 Set oApp_Excel = CreateObject("EXCEL.APPLICATION") oApp_Excel.DisplayAlerts = False oApp_Excel.Visible = True Set oBook = oApp_Excel.Workbooks.Open(PATH, ReadOnly:=True) On Error Resume Next column = oBook.Sheets("Sheet1").Cells.Find(What:=CStr(size)).column If Err.Number = 91 Then column = 0 On Error GoTo 0 ' 无论是否出错,都执行关闭操作 oBook.Close SaveChanges:=False oApp_Excel.Quit ' 释放所有对象 Set oBook = Nothing Set oApp_Excel = Nothing getColumnOfFirstRow = column End Function
方案2:保留原错误跳转逻辑,在错误处理块中补充关闭操作
Function getColumnOfFirstRow(PATH, size) As Long Dim oApp_Excel As Excel.Application Dim oBook As Excel.Workbook Dim column As Long column = 0 Set oApp_Excel = CreateObject("EXCEL.APPLICATION") oApp_Excel.DisplayAlerts = False oApp_Excel.Visible = True Set oBook = oApp_Excel.Workbooks.Open(PATH, ReadOnly:=True) On Error GoTo errhand column = oBook.Sheets("Sheet1").Cells.Find(What:=CStr(size)).column errhand: If Err.Number = 91 Then column = 0 ' 无论是否出错,都执行关闭 oBook.Close SaveChanges:=False oApp_Excel.Quit Set oBook = Nothing Set oApp_Excel = Nothing getColumnOfFirstRow = column End Function
内容的提问来源于stack exchange,提问作者S.M_Emamian
相关产品推荐
相关产品推荐

