ユーザフォーム入門 - 住所入力フォームを作成する(7) 〜 転記のテクニック別解
■転記の方法 − 別解1■

ワークシートへの転記は、テクニック集”ユーザーフォーム入門−住所入力フォームを作成
する(4)”のように、セル1つに対し、コントロールの値を1つずつ転記していくのが基
本ですが、(4)のサンプルの中でコントロールの値クリアのために使用しているFor Each
 ステートメントでのループによる手法を応用すれば、以下のようなプロシージャでも転記は
可能です。

前提:各テキストボックスのTagプロパティー(空のダミープロパティー)に転記するセルの
   列番号をプロパティーウィンドウより個別に設定。
   (例:txtTELのTagプロパティーは6、txtTantouのTag ⇒ 9)

(サンプル:cmdTouroku_Clickイベントプロシージャを上書き)


'==============宣言セクション========================================
Private Const BOOK_NAME As String = "住所録.xls"

'==============コマンドボタンクリックイベント========================
Private Sub cmdTouroku_Click()

    Dim lngRowNum As Integer
    Dim Ctrl As Control
    Dim i As Integer

    With Workbooks(BOOK_NAME).Sheets("sheet1")
        lngRowNum = .Cells(65536, 1).End(xlUp).Row + 1

        'コントロール名が”txt”で始まるもののみ転記&値クリア
        For Each Ctrl In Me.Controls
            If Ctrl.Name Like "txt*" Then
                .Cells(lngRowNum, CInt(Ctrl.Tag)).Value = Ctrl.Value
                Ctrl.Value = ""
            End If
        Next
    End With

End Sub

■転記の方法 − 別解2■

仮にコントロールのオブジェクト名をテクニック集”ユーザーフォーム入門 − 住所
入力フォームを作成する(2)”のように指定せず、標準の状態(例:TextBox1)や
”Txt1”というように、数値インデックスを付加して識別子としているような場合には、
Controlsコレクションから各コントロールにアクセスする方法を応用できます。。

EX.) Cells(1,1).Value = Me.Controls("TextBox1").Value

この方法を応用すると、転記先のセルの指定位置に従ってコントロールの識別用の数値を
オブジェクト名に含めるようにすれば、以下のような転記方法も可能です。

テキストボックスの名称が"txt1 〜 txt9"とすると・・・

'==============宣言セクション========================================
Private Const BOOK_NAME As String = "住所録.xls"

'==============コマンドボタンクリックイベント========================
Private Sub cmdTouroku_Click()

    Dim lngRowNum As Integer
    Dim i As Integer

    With Workbooks(BOOK_NAME).Sheets("sheet1")
        lngRowNum = .Cells(65536, 1).End(xlUp).Row + 1

        For i = 1 To 9
            .Cells(lngRowNum, i).Value = Me.Controls("txt" & i).Value
            Me.Controls("txt" & i).Value = ""
        Next i

    End With

End Sub

Excel2000



戻る


Excel Word Access VBA! モーグ