2

ユーザーフォームに複数ページのコントロールがあります。ユーザーが新しいページに移動したときに、現在のページのデータをデータベースに保存したいと考えています。ユーザーはさまざまな方法でページ間を移動できますが、それらすべての手順を記述したくありません。新しいページが選択される前に、アクティブなページを参照するために使用できるイベントはありますか?

マルチページ コントロールの Change イベントを見てきましたが、そこで multipage.selecteditem を参照すると、新しいページが参照されます。私が必要としているのは BeforeChange イベントですが、イベントはありません。

multipage.exit イベントも確認しましたが、これは、ページだけでなく、マルチページ コントロール全体が終了したときにトリガーされます。

何か案は?

4

3 に答える 3

5

MultiPage1_Changeイベントをご利用ください。

マルチページに名前を割り当てた場合は、サブルーチンを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 に答える