如何通过MS Project VBA关闭已打开的Excel工作簿或Excel程序?
在MS Project宏中关闭已打开的Excel工作簿或程序
关闭特定Excel工作簿
通过GetObject获取已运行的Excel实例,遍历工作簿集合找到目标文件关闭,无需重新打开(避免文件锁定报错)。以下是后期绑定代码,无需额外引用Excel对象库,兼容不同Office版本:
Sub CloseSpecificExcelWorkbook() Dim xlApp As Object Dim xlWB As Object Dim targetWBName As String ' 替换为你要关闭的工作簿全名(含扩展名,如"销售数据.xlsx") targetWBName = "销售数据.xlsx" ' 尝试获取已运行的Excel实例 On Error Resume Next Set xlApp = GetObject(, "Excel.Application") On Error GoTo 0 If Not xlApp Is Nothing Then ' 遍历所有打开的工作簿 For Each xlWB In xlApp.Workbooks If xlWB.Name = targetWBName Then ' 按需设置SaveChanges:True=保存,False=不保存,xlPrompt=提示用户 xlWB.Close SaveChanges:=True Exit For End If Next xlWB ' 可选:如果关闭后Excel无打开的工作簿,自动退出程序 ' If xlApp.Workbooks.Count = 0 Then xlApp.Quit Set xlWB = Nothing Set xlApp = Nothing Else MsgBox "未找到运行中的Excel程序" End If End Sub
关闭整个Excel程序
如果无需指定工作簿,直接关闭所有Excel实例(含所有打开的工作簿):
Sub CloseEntireExcel() Dim xlApp As Object ' 获取已运行的Excel实例 On Error Resume Next Set xlApp = GetObject(, "Excel.Application") On Error GoTo 0 If Not xlApp Is Nothing Then ' 退出Excel,SaveChanges参数按需调整 xlApp.Quit SaveChanges:=True Set xlApp = Nothing Else MsgBox "未找到运行中的Excel程序" End If End Sub
关键说明
- 避免使用
SendKeys:MS Project的Application对象不支持该方法,且SendKeys依赖窗口焦点,稳定性差,优先通过Office对象模型操作。 - 关于多Excel实例:
GetObject仅能获取一个活跃实例,若需处理多个实例,需借助Windows API(复杂场景可自行扩展)。 - 保存设置:根据实际需求调整
SaveChanges参数,防止数据丢失。
内容的提问来源于stack exchange,提问作者Damien Dambre
相关产品推荐
相关产品推荐

