【发布时间】:2015-12-17 23:56:47
【问题描述】:
我在 Word 和 Excel 上使用 VBA。我让 Word 运行一个用户表单,它会自动打开一个 Excel 文件。用户应在 Excel 文件中填写一些数据,然后返回 Word 用户表单。当用户填写完 Word 用户表单中的所有字段后,它将在 Word 上运行一些 VBA 代码,将数据从 Excel 复制到 Word。完成后,Excel 文件将自动关闭。因此,我需要防止用户手动关闭 Excel 应用程序。
为了做到这一点,我在Sub Workbook_BeforeClose 的 Excel VBA 中使用这些代码。如果用户关闭 Excel 应用程序窗口,它将显示一个消息框,询问用户是否仍在使用 Word 用户窗体。代码如下:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
answer = MsgBox("Are you still working with Word userform?", vbYesNo)
If answer = vbYes Then
Cancel = True
MsgBox "This workbook should not be closed. It will be automatically closed when you finish working with Ms. Word Template Userform."
Else
Application.ThisWorkbook.Saved = True
End If
End Sub
在 Word VBA 中,我有关闭 Excel 文件的代码:
Sub closeExcelApp()
If Not excelApp Is Nothing Then
excelApp.DisplayAlerts = False
excelWb.Close savechanges:=False
Set excelWb = Nothing
excelApp.Quit
End If
Set excelApp = Nothing
End Sub
当 Word VBA 代码完成将数据从 Excel 复制到 Word 时,将调用此 Sub。但是,调用此 Sub 将导致调用 Workbook_BeforeClose。同时,当我从 Word VBA 调用 closeExcelApp 子时,我不希望调用 Workbook_BeforeClose。
有什么建议吗?
【问题讨论】:
-
最好的方法是创建一个
Public Boolean,在输入此closeExcelApp时设置为True,并在Workbook_BeforeClose的开头添加If Boolean Then Exit Sub之类的内容。这应该够了吧! ;)