gpt4 book ai didi

c++ - Excel COM 对象 - 处理工作簿关闭事件

转载 作者:行者123 更新时间:2023-11-30 03:58:10 24 4
gpt4 key购买 nike

我正在使用 QAxObject 从 Qt 应用程序自动化 Excel 窗口。我需要在用户关闭 Excel 窗口时收到通知。

Excel 工作簿 COM 对象有一个事件 BeforeClose() 但处理它是不够的,因为它在提示用户保存更改之前触发,所以用户会在保存确认对话框中取消关闭操作。因此,即使 BeforeClose() 被触发,Excel 窗口也可能不会关闭。

还有另一个事件 Deactivate(),它在工作簿停用时触发。当窗口实际关闭以及用户切换到不同的工作簿时会触发此事件。因此,单独处理它也是不够的。

我目前使用的解决方案是在触发 BeforeClose() 时将 bool 变量 closing 设置为 true。当随后触发 Deactivate() 事件处理程序时,我认为只有当 closing 设置为 true 时,Excel 才会关闭。

这还需要做一件事,如果用户在保存确认对话框中取消关闭操作,则将 closing 设置为 false。我为此使用的方法是在 BeforeClose() 中启动一个重复计时器,并在计时器中检查 Excel COM 对象的 Visible 属性。当模式对话框(例如保存确认对话框)打开时,Visible 属性被评估为 false。因此,只要 Visible 属性在计时器中评估为 true,我就可以将 closing 设置为 false

有人知道在 Excel 工作簿实际关闭时收到通知的更好方法吗?

最佳答案

解决方法是像这样绕过 Excel 的提示(vb 代码):

Private Sub Handler_WorkbookBeforeClose(wb As Workbook, ByRef cancel As Boolean)

If wb.Saved = False Then

Dim answer As MsgBoxResult = MsgBox("Do you want to save the changes you made to " + wb.Name + "?", MsgBoxStyle.YesNoCancel)

Select Case answer
Case MsgBoxResult.Yes
wb.Save()
Case MsgBoxResult.No
wb.Saved = True
Case MsgBoxResult.Cancel
cancel = True
Exit Sub
End Select

End If

'Put here your code to be executed when workbook has been closed.

End sub

关于c++ - Excel COM 对象 - 处理工作簿关闭事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27586343/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com