ユーザフォーム入門 - 住所入力フォームを作成する(9) 〜 レコードの移動
テクニック集”ユーザフォーム入門 - 住所入力フォームを作成する”の
1−8までの内容を前提とし、ここでは登録済みのデータを”前へ”、”次へ”ボタンで
レコード移動し、フォーム上に表示させる手法について検討します。

住所入力フォームの入力に使用しているテキストボックスコントロールは、
ControlSourceプロパティーを使用してワークシート上のセルにリンクさせることが
出来るため、”前へ”、”次へ”ボタンをクリックしたときに、このプロパティーを
動的に設定、変更することとします。

1.住所録フォームにコマンドボタン3つ(cmdNew, cmdPrevious, cmdNext)を追加します。
  コマンドボタンのオブジェクト名を変更し、TabStopプロパティーをFalseに設定。
        ↓
2.フォームモジュールの宣言セクションに以下の一行(カレントレコード設定用カウンタ)
  を追加します。
※宣言セクションはイベントプロシージャが記述される上の部分で、
 モジュールレベル変数等を記述するセクションです。オブジェクトボックスより
 ”(General)”を選択してください。
 
	Private CurNum As Long

        ↓
3.コマンドボタンのクリックイベントプロシージャと、ControlSource設定、解除用の
  プロシージャを追加します。以下のサンプルをモジュールの最下部に貼り付けてください。

※ControlSourceプロパティー設定例

	[ブック名]シート名!セル範囲のアドレス
	ex) [MyBook.xls]!Sheet1!$A$1

(サンプル)
'=====================================================================
Private Sub cmdNew_Click()

    'コントロールソースを解除し、新規入力が可能な状態とする
    Call ReleaseCtrlSource

End Sub
'=====================================================================
Private Sub cmdNext_Click()

    Dim LastRow As Integer
    '住所録シートの最終行を取得
    LastRow = Workbooks(BOOK_NAME).Sheets(1).Cells(65536, 1).End(xlUp).Row

    'カレントレコードがない(CurNum=0)か、最終行以上である場合は
    'メッセージボックスを表示し、ControlSouce解除する。
    If CurNum = 0 Or CurNum >= LastRow Then
        MsgBox "レコードがありません"
        'ControlSource解除用のプロシージャ呼び出し
        Call ReleaseCtrlSource
        Exit Sub
    Else
        '対象行を設定(カレントレコードのカウントアップ)
        CurNum = CurNum + 1
    End If
    'ControlSource設定用プロシージャ呼び出し
    Call SetCtrlSource(CurNum)

End Sub
'=====================================================================
Private Sub cmdPrevious_Click()

    'カレントレコードが0の場合には住所録の最終行をカレントレコードとする
    If CurNum = 0 Then
        CurNum = Workbooks(BOOK_NAME).Sheets(1).Cells(65536, 1).End(xlUp).Row
    ElseIf CurNum <= 2 Then
        'カレントレコードが2の場合には前のレコードは項目行となるため
        'メッセージボックスを表示してからControlSource解除
        MsgBox "レコードがありません"
        Call ReleaseCtrlSource
        Exit Sub
    Else
        'カレントレコード用カウンタをマイナス
        CurNum = CurNum - 1
    End If

    'ControlSource設定用プロシージャ呼び出し
    Call SetCtrlSource(CurNum)

End Sub
'=====================================================================
Private Sub SetCtrlSource(RowNum As Long)

    Dim Ctrl As Control
    Dim i As Integer

    With Workbooks(BOOK_NAME).Sheets(1)
        '各コントロールをループし、本プロシージャに渡された引数
        'RoNumをカレントレコードとし、テキストボックスのControlSource
        'を設定。
        For Each Ctrl In Me.Controls
            If Ctrl.Name Like "txt*" Then
                i = i + 1
                Ctrl.ControlSource = _
                "[" & BOOK_NAME & "]" & .Name & "!" & .Cells(RowNum, i).Address
            End If
        Next
   End With

End Sub
'=====================================================================
Private Sub ReleaseCtrlSource()

    Dim Ctrl As Control
    Dim i As Integer
    '各コントロールをループ。テキストボックスはControlSourceを解除。
    '表示されているデータをクリアします。

    For Each Ctrl In Me.Controls
        If Ctrl.Name Like "txt*" Then
            Ctrl.ControlSource = ""
            Ctrl.Value = ""
            CurNum = 0
        End If
    Next

End Sub
'=====================================================================

Excel2000



戻る


Excel Word Access VBA! モーグ