我对用户表单进行了多页控制。当用户导航到新页面时,我希望将当前页面上的数据保存到数据库中。用户可以通过各种方式在页面之间导航,我不想为所有这些页面编写过程。在选择新页面之前,是否有可用于引用活动页面的事件?
我已经查看了多页面控件的Change事件,但是如果你在那里引用multipage.selecteditem它指的是新页面。我需要的是一个BeforeChange事件,但没有一个。
我还查看了multipage.exit事件,但是当退出整个多页面控件时触发,而不仅仅是页面。
有什么想法吗?
答案 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 结束子