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

我有一个用户窗体上的多页控件。 当用户导航到新页面时,我希望当前页面上的数据被保存到数据库中。 用户可以以各种方式在页面之间导航,我不想为它们编写一个过程。 在select新页面之前是否有可用于引用活动页面的事件?

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

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

有任何想法吗?

使用MultiPage1_Change事件。

如果你已经为你的多页面指定了一个名字,那么你可以把YourMultiPageName_Change (这是默认的)的子程序YourMultiPageName_Change

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

 Private Sub MultiPageBannerFilter_Change() MsgBox "You have changed pages!", vbInformation End Sub 

只要把你的代码保存到数据库的信息,而不是消息框,并确保事件子程序正确命名,这应该工作。

修订

 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 

我有一个类似的挑战,并提出了下面的代码。 您必须跟踪您所在的页面并使用Click事件。 因此,在“初始化”子菜单中将“多页”设置为“页面”,并将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 

如果有页面,MultiPage1_Change事件将被触发。 因此,没有必要检测更改并使用公共variables“previousPage”

Private Sub MultiPage1_Change()Dim currentPage As String currentPage = MultiPage1.SelectedItem.Name MsgBox currentPage&“Selected!”,vbInformation End Sub