如何在Excel VBA中捕获多页控件的页面退出事件

时间:2013-03-21 15:58:24

标签: excel excel-vba vba

我对用户表单进行了多页控制。当用户导航到新页面时,我希望将当前页面上的数据保存到数据库中。用户可以通过各种方式在页面之间导航,我不想为所有这些页面编写过程。在选择新页面之前,是否有可用于引用活动页面的事件?

我已经查看了多页面控件的Change事件,但是如果你在那里引用multipage.selecteditem它指的是新页面。我需要的是一个BeforeChange事件,但没有一个。

我还查看了multipage.exit事件,但是当退出整个多页面控件时触发,而不仅仅是页面。

有什么想法吗?

3 个答案:

答案 0 :(得分:4)

使用MultiPage1_Change事件。

如果您已为多页面指定了名称,则可以将子程序从MultiPage1_Change(默认值)更改为YourMultiPageName_Change

例如,我有一个名为“MultiPageBannerFilter”。我使用这个子程序执行一些代码来捕获这个对象的_Change事件。

Private Sub MultiPageBannerFilter_Change()

MsgBox "You have changed pages!", vbInformation

End Sub

只需将代码保存到数据库而不是消息框,并确保事件子例程已正确命名,这应该有效。

<强> REVISION

Public previousPage As String


Sub UserForm_Activate()
    previousPage = MultiPage1.SelectedItem.Name

End Sub

Private Sub MultiPage1_Change()

Dim currentPage As String
currentPage = MultiPage1.SelectedItem.Name

If Not currentPage = previousPage Then
    previousPage = currentPage
    '
    '
    MsgBox "Your Code Goes Here!", vbInformation
    '
    '
End If



End Sub

答案 1 :(得分:0)

我遇到了类似的挑战,并提出了以下代码。您必须跟踪您所在的页面并使用Click事件。因此,将Multipage设置为Initialize子中的Page,并将intPrevPage设置为相应的数字。

Private Sub MultiPage1_Click(ByVal Index As Long)
    Select Case True
' If the click doesn't change the Page, then do nothing
        Case intPrevPage = MultiPage1.Value
' ValidForm is a function that validates data on previous
' Page if click changed the Page
        Case ValidForm
' If TRUE then capture current Page
            intPrevPage = MultiPage1.Value
            Call FormatPage
' If FALSE then return to previous Page
        Case Else
            MultiPage1.Value = intPrevPage
    End Select
End Sub

答案 2 :(得分:-1)

如果有页面,则只会触发MultiPage1_Change事件。因此,没有必要检测更改并使用公共变量“previousPage”

Private Sub MultiPage1_Change()     Dim currentPage As String     currentPage = MultiPage1.SelectedItem.Name     MsgBox currentPage&amp; “选中!”,vbInformation 结束子