■転記の方法 − 別解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
|