VBA如何关闭用户已打开的指定Excel文件窗口
错误原因梳理
你的代码报错核心有3类问题:
- 文件名拼写错误:你写的后缀为
xlxs,Excel正确后缀为xlsx,该错误会直接触发找不到文件的432报错 GetObject参数使用错误:当目标文件已被打开时,不需要额外传入类名参数,错误的参数格式会触发429、432类报错- 对象方法调用错误:Excel应用对象下的工作簿集合、窗口集合均为复数形式
Workbooks/Windows,单数形式Workbook/Window不存在,会触发438报错
正确实现代码
以下代码可以匹配所有场景的已打开Excel文件关闭需求,不管文件在当前Excel实例还是其他后台/前台Excel实例中打开:
Sub CloseTargetExcelFile() ' 替换为你要关闭的文件的完整绝对路径 Const TARGET_FILE_PATH As String = "C:\你的文件存储路径\excel2close.xlsx" Dim targetFileName As String targetFileName = Dir(TARGET_FILE_PATH) Dim wb As Workbook Dim fileOpened As Boolean ' 检查当前Excel实例是否打开了目标文件 On Error Resume Next Set wb = Workbooks(targetFileName) On Error GoTo 0 If Not wb Is Nothing Then wb.Close SaveChanges:=False ' 需要保存修改就把False改为True fileOpened = True Else ' 遍历所有运行中的Excel实例,查找目标文件 Dim excelApp As Object Dim eachWb As Object On Error Resume Next Set excelApp = GetObject(, "Excel.Application") Do While Not excelApp Is Nothing For Each eachWb In excelApp.Workbooks If UCase(eachWb.FullName) = UCase(TARGET_FILE_PATH) Then eachWb.Close SaveChanges:=False fileOpened = True Exit For End If Next Set excelApp = GetObject(, "Excel.Application") Loop On Error GoTo 0 End If ' 此处可继续添加你原来的文件存在性检查、内容追加逻辑 End Sub
注意事项
- 如果要关闭的是未保存的新建空白工作簿,直接传入工作簿显示名称即可,不需要填写完整路径
- 代码默认关闭时不保存修改,需要保存可将
SaveChanges:=False改为SaveChanges:=True - 建议统一使用完整绝对路径匹配文件,避免同名称不同路径的文件被误关闭
内容的提问来源于stack exchange,提问作者lagercj
相关产品推荐
相关产品推荐

