EXCEL2003 VBAのテキストボックス
ユーザーフォームからの入力・操作のみでシート上の住所録を編集出来るものを作ろうとしております。
テキストボックスの値の操作についての質問なのですが、端的に説明しにくいので自分で記述したコードと共に説明させていただきます。
シートはA列に氏名、B列に住所が入るようにし、100件のデータを格納出来るようにします。1行目はタイトルです。
セル範囲の名前は以下のように定義付けしています。
A2:A101 「氏名」
A2:B101 「住所録」
ユーザーフォームには以下のオブジェクトを配置しております。
「名前」入力・出力用テキストボックス(オブジェクト名:TB1)
「住所」入力・出力用テキストボックス(オブジェクト名:TB2)
名前検索用コンボボックス(オブジェクト名:CMB)
「追加」コマンドボタン(オブジェクト名:CB1)
「訂正」コマンドボタン(オブジェクト名:CB2)
まずは新規データの入力。テキストボックス(TB1, TB2)に入力した後の「追加」コマンドボタン(CB1)クリック時の処理は以下のコードでうまくいっております。
Private Sub CB1_Click()
Range("A65536").End(xlUp).Select
Selection.Offset(1, 0).Select
Selection = TB1
Selection.Offset(0, 1).Select
Selection = TB2
Range("住所録").Sort _
Key1:=Range("A2"), _
Order1:=xlAscending, _
Header:=xlNo, _
OrderCustom:=1, _
MatchCase:=False, _
Orientation:=xlTopToBottom, _
SortMethod:=xlPinYin
End Sub
同じテキストボックス(TB1, TB2)を使いデータの訂正をする為、コンボボックス(CMB)に以下のコードを記載しました。
尚、コンボボックスのRowSourceは「氏名」です。
Private Sub CMB_Change()
Dim AA As String
AA = CMB.Value
TB1.Value = Application.WorksheetFunction.VLookup(AA, Range("住所録"), 1)
TB2.Value = Application.WorksheetFunction.VLookup(AA, Range("住所録"), 2)
End Sub
これでコンボボックスで選択した名前からテキストボックスに名前と住所を表示することができました。
ここからが上手くいきません
テキストボックスに表示された文字を同じテキストボックス上で変更し、変更後の情報を「訂正」コマンドボタン(CB2)クリックでシート上に送るために以下のコードを記述しました。
Private Sub CB2_Click()
Dim BB As String
BB = CMB.Value
Dim CC As Range
Set CC = Range("氏名").Find(what:=BB, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows)
Cells(CC.Row, CC.Column).Select
Selection = TB1
Selection.Offset(0, 1).Select
Selection = TB2
Range("住所録").Sort _
Key1:=Range("A2"), _
Order1:=xlAscending, _
Header:=xlNo, _
OrderCustom:=1, _
MatchCase:=False, _
Orientation:=xlTopToBottom, _
SortMethod:=xlPinYin
CBM.ListIndex = -1
End Sub
これを実行してもシートには訂正後の情報が反映されず訂正前の情報が入ってしまいます。
ここで訂正後の情報を反映させるためにはどうしたらよろしいのでしょうか。
補足
回答ありがとうございます。 上記を実現するとなると以下のコードになるのですが Dim buffer As String '表示は100行まで If TB1.Lines.Length >= 100 Then buffer = TB1.Text.Remove(0, TB1.Text.IndexOf(Lf)+1) End If TB1.Clear() TB1.AppendText(buffer) TB1.Clear()で同じこと(カレット0描画)が起こりちらついてしまいます。