2

我在用户窗体上有一个多页控件。当用户导航到新页面时,我希望将当前页面上的数据保存到数据库中。用户可以通过各种方式在页面之间导航,我不想为所有页面编写程序。在选择新页面之前,我可以使用一个事件来引用活动页面吗?

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

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

有任何想法吗?

4

3 回答 3

5

使用MultiPage1_Change事件。

如果您为 Multipage 分配了一个名称,那么您可以将子例程从MultiPage1_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
于 2013-03-21T17:02:58.503 回答
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
于 2016-08-11T14:05:40.840 回答
-1

MultiPage1_Change 事件只会在有页面时触发。因此,无需检测更改并使用公共变量“previousPage”

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

于 2013-12-30T05:33:31.470 回答