Excel的COM对象 - 处理工作簿关闭事件(Excel COM object - handlin

2019-10-21 11:11发布

我自动使用Qt应用程序中的Excel窗口QAxObject 。 我需要得到通知时,Excel窗口被用户关闭。

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

还有另一种情况下Deactivate()时,工作簿被取消激活被触发。 当一个窗口实际上被关闭,以及当用户切换到一个不同的工作簿作为此被激发。 因此,处理它独自也是不够的。

我使用目前的解决方案是设置一个布尔变量closing为真时BeforeClose()被触发。 当Deactivate()事件处理程序随后解雇了,我认为Excel中仅当关闭closing设置为true。

这需要一两件事,创下closing为false,如果用户取消在保存确认对话框关闭操作。 我用,该方法开始于重复的计时器BeforeClose()并检查Visible的Excel COM对象的属性中的计时器。 Visible属性被评估为假时,一个模式对话框如保存确认对话框打开。 所以,我可以设置closing ,以false尽快Visible财产评估,以true的计时器。

有谁知道一个更好的办法时,Excel工作簿实际上是封闭得到通知?

Answer 1:

一种解决方法是绕开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


文章来源: Excel COM object - handling workbook close event
标签: c++ excel qt com