|
おじさん46 さん、Abebobo さん、こんにちは。
おじゃまします。
> 7つあるTextBoxの内、2つをComboBoxへ変更したい
↑この文章の解釈ですが、
たとえば、
TextBox2 を → ComboBox1 に、
TextBox3 を → ComboBox2 に、
変更ということだとすると、
Select Case 文で分岐すればよいと思います。
(まったくの解釈違いなら、以下は無視してください)
----------------------------------------------
まず、UserFormのほうの
> Private Sub TextBox7_AfterUpdate()
> '行番号入力でセルデータ収集
ですが、変数の宣言を以下のようにして、
Dim 行番号 As Long
Dim Target As Range
Dim i As Long
Dim myValue As String
番号i によるテキストボックスまたはコンボボックスへのセル値の転記
は以下のようにしてみてはどうでしょう?
行番号 = Val(Me.TextBox7.Text)
'Rangeオブジェクト変数 Target に指定セルをセットする
Set Target = ActiveSheet.Cells(行番号, 1)
For i = 1 To 6
myValue = Target.Offset(, i).Value
Select Case i
Case 2
Me.ComboBox1.Text = myValue
Case 3
Me.ComboBox2.Text = myValue
Case Else
Me.Controls("textbox" & i).Text = myValue
End Select
Next i
Target.Select
End Sub
もし、こういうことでよかったら、
シートのほうのA列 右クリック時の処理も同様に書き換えます。
----------------------------------------------
'シートの該当行のA列セル選択右クリックで
' UserForm1上の各TextBoxにセルのデータを移動(転記)するコード
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
'A列セル選択右クリックでセルデータ収集後フォームを開く
Dim r As Range
Dim i As Long
Dim myValue As String
If Target.Column <> 1 Then Exit Sub
If Target.Row = 1 Then Exit Sub
Cancel = True
Set Target = Target.Item(1)
With UserForm1
.Show 0
.Caption = Target.Text
For i = 1 To 6
myValue = Target.Offset(, i).Value
Select Case i
Case 2
.ComboBox1.Text = myValue
Case 3
.ComboBox2.Text = myValue
Case Else
.Controls("textbox" & i).Text = myValue
End Select
Next i
End With
End Sub
----------------------------------------------
よくみると、UserForm1 のほうでの転記処理と、
シートの右クリック時の転記処理部分は同じ処理をしていることが
分かります。
そういうときは、(つぎにまた コントロールなどに変更が
あったとき、2か所を変更しなければならないので)どこか
一箇所に書いておいて、それをUserForm1の
TextBox7_AfterUpdateと、シートの右クリックから呼び出せる
ように、まとめたほうがあとあとのメンテナンスが楽というこ
とが分かってきますが、、それはま、次のステップということ
で。。。(^^
|
|