MW211 EXIT

devlog
ExcelVBA/フォーム入力欄チェックの落とし穴(3)
2020年09月12日
さて、(1)~(2)で対応完了だが、なんとなく関係なページでも発動するのが嫌だ。
ってことで特定のページのみに限定する方法。

まず、Exitイベントだがこれは簡単で、Exit前のページ番号が取得できるので
それを参照すればよい。
(なお、ページ番号は値としては0オリジンで管理されているので注意)
┌──────────────────────────────────────┐
│Private Sub MultiPage_Exit(ByVal Cancel As MSForms.ReturnBoolean)           │
│    If Me.MultiPage.Value = 2 Then ' 3ページのみ限定                        │
│        ' 入力チェックや補正                                                │
│    End If                                                                  │
│End Sub                                                                     │
└──────────────────────────────────────┘

次に、ChangeイベントだがこれはChange後のページ番号になってしまうので厄介だ。
Static変数に一つ前の値を記録しておくのがよいようだ。
いっそのこと、メンバ変数(Static変数も兼ねる)にしてしまった方が
わかりやすいということで以下のような感じになる。
┌──────────────────────────────────────┐
│Private m前ページ As Long                                                   │
├──────────────────────────────────────┤
│Private Sub UserForm_Initialize()                                           │
│    m前ページ = Me.MultiPage.Value                                          │
│End Sub                                                                     │
├──────────────────────────────────────┤
│Private Sub MultiPage_Change()                                              │
│    If m前ページ = 2 Then       ' 3ページのみ限定                           │
│        ' 入力チェックや補正                                                │
│        ' 入力チェックや補正                                                │
│        ' 入力チェックや補正                                                │
│    End If                                                                  │
│    m前ページ = Me.MultiPage.Value                                          │
│End Sub                                                                     │
└──────────────────────────────────────┘
分類:ExcelVBA