HOME > 即効テクニック > Excel VBA > ユーザーフォーム関連のテクニック > マルチページの未入力テキストボックスへフォーカスを移動させる

即効テクニック

ユーザーフォーム関連のテクニック

マルチページの未入力テキストボックスへフォーカスを移動させる

(Excel 97/2000)
マルチページに配置された複数のテキストボックスの入力状況をチェックして、入力されていなかった場合は、「ここです」という文字列をセットしてフォーカスを移動させます。
マルチページは2ページで、各ページにテキストボックス2個ずつと、1ページ目にコマンドボタンを1つ配置します。
テキストボックス名は「TextBox1」「TextBox2」「TextBox3」「TextBox4」です。
コマンドボタン名は「CommandButton1」です。
フォームが開くときに発生するイベント「Initialize」に次のマクロを記述します。
Private Sub UserForm_Initialize()
    With cl_Box
      .Add Item:=TextBox1
      .Add Item:=TextBox2
      .Add Item:=TextBox3
      .Add Item:=TextBox4
    End With
End Sub
コマンドボタンがクリックされた時に発生するイベントには、次のマクロを記述します。
Private Sub CommandButton1_Click()
    Dim c
    Dim i

    For i = 1 To 4
      If cl_Box(i) = "" Then
          If i < 3 Then
             With MultiPage1
                .page2.Enabled = False
                .page2.Enabled = True
             End With
          Else
             With MultiPage1
                .page1.Enabled = False
                .page2.Enabled = True
                .page1.Enabled = True
             End With
          End If
              MsgBox "入力されていない項目があります。" _
                & vbLf & vbLf & "確認して下さい..." _
                , vbOKOnly + vbExclamation, "注意"
           With cl_Box(i)
              .Text = "ここです"
              .SelStart = 0
              .SelLength = Len(cl_Box(i).Text)
              .SetFocus
           End With
        End If
    Next i
End Sub
入力されていないコントロールを取得して、それがマルチページの1ページ目のコントロールでなければ、1ページ目以外を一度FALSEにして1ページ目をカレントにし、その後、再度FALSEにしたページを元に戻す。これを各ページごとに条件分岐させて、未入力のテキストボックスに文字列をセットしてフォーカスを移動させています。
SelLengthプロパティを使って、セットした「ここです」という文字列が選択された状態にしています。