前提・実現したいこと
VBAで以下のような入力フォームを作ろうとしています。
やろうとしていることは以下の通りです。
①性別を選択するまで男性用、女性用テキストボックスはEnabledにしたい
②性別で、男性が選択されたら男性用と書かれたテキストボックスのみが入力可能になるようにしたい。逆に女性が選択されたら、女性用と書かれたテキストボックスのみが入力可能になるようにしたい。
困っていること
①を実施したいのに、テキストボックスがEnabledにならない
②男性を選択しても女性用テキストボックスも入力可能である
ソースコード
VBA
1Option Explicit 2 3Private sex As String 4Private lastRow As Long 5 6Private Sub UserForm1_Initialize() 7TextBox3.Enabled = False '男性用テキストボックス 8TextBox4.Enabled = False '女性用テキストボックス 9 10 11End Sub 12 13 14Private Sub CommandButton1_click() 15 16With Worksheets("Sheet1") 17 lastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1 18 .Cells(lastRow, 1).Value = TextBox1.Text '名前 19 .Cells(lastRow, 2).Value = sex '性別選択オプションボックス 20 .Cells(lastRow, 3).Value = TextBox3.Text 21 .Cells(lastRow, 4).Value = TextBox4.Text 22End With 23 24TextBox1.Text = "" 25male.Value = False 26female.Value = False 27TextBox3.Text = "" 28TextBox4.Text = "" 29 30End Sub 31 32Private Sub Male_Change() 33 If male.Value = True Then 34 sex = "男性" 35 End If 36End Sub 37 38Private Sub Male_Change2() 39 If male.Value = True Then 40 TextBox3.Enabled = True 41 TextBox4.Enabled = False 42 43 End If 44End Sub 45 46Private Sub Female_Change2() 47 If female.Value = True Then 48 TextBox3.Enabled = False 49 TextBox4.Enabled = True 50 End If 51End Sub 52 53Private Sub Female_Change() 54 If female.Value = True Then 55 sex = "女性" 56 End If 57End Sub 58
試したこと
ユーザーフォームのプロパティウィンドウから、TextBox3とTextBox4のEnabledオプションをFalseにしてみましたが、そうすると性別選択をしても入力フォームは完全に入力できない状態になります。
あとは
VBA
1Private Sub Male_Change() 2 If male.Value = True Then 3 sex = "男性" 4 End If 5End Sub 6 7Private Sub Male_Change2() 8 If male.Value = True Then 9 TextBox3.Enabled = True 10 TextBox4.Enabled = False 11 12 End If 13End Sub 14 15Private Sub Female_Change2() 16 If female.Value = True Then 17 TextBox3.Enabled = False 18 TextBox4.Enabled = True 19 End If 20End Sub 21 22Private Sub Female_Change() 23 If female.Value = True Then 24 sex = "女性" 25 End If 26End Sub
の入力位置も気になっているのですが、もしこれが間違っているとしてじゃあどこに入力したら適切??となっています……。
操作環境他
Excel2010、Win7 64bit版で操作しています。
また当方VBAを独学で学んでいる初心者です。初歩的なところで間違いなどしているかと思います。
どうぞお手柔らかにお願いいたします。
お礼と最終的なコード
皆様ご回答いただきありがとうございました。大変勉強になりました。
ベストアンサーはhatena19さまにさせていただきました。
皆様のアドバイスを参考に、以下のようなコードになりました。
※2019/01/25追記:コードに誤りがあったため下記修正いたしました。コメントアウトにて修正箇所記入しております。
VBA
1Option Explicit 2 3Private sex As String 4Private lastRow As Long 5 6Private Sub UserForm_Initialize() 7'UserForm1・・・という書き方をしていたのですが、こちらが誤りであると別質問をした際に気が付きました。 8 TextBox3.Enabled = False 9 TextBox3.BackColor = &HC0C0C0 10 TextBox4.Enabled = False 11 TextBox4.BackColor = &HC0C0C0 12End Sub 13 14 15Private Sub CommandButton1_click() 16 17With Worksheets("Sheet1") 18 lastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1 19 .Cells(lastRow, 1).Value = TextBox1.Text 20 .Cells(lastRow, 2).Value = sex 21 .Cells(lastRow, 3).Value = TextBox3.Text 22 .Cells(lastRow, 4).Value = TextBox4.Text 23End With 24 25TextBox1.Text = "" 26male.Value = False 27female.Value = False 28TextBox3.Text = "" 29TextBox4.Text = "" 30TextBox5.Text = "" 31 32End Sub 33 34 35Private Sub male_click() 36 sex = "男性" 37 TextBox3.Enabled = True 38 TextBox4.Enabled = False 39 TextBox3.BackColor = &HFFFFFF 40 TextBox4.BackColor = &HC0C0C0 41End Sub 42 43Private Sub female_click() 44 sex = "女性" 45 TextBox3.Enabled = False 46 TextBox4.Enabled = True 47 TextBox4.BackColor = &HFFFFFF 48 TextBox3.BackColor = &HC0C0C0 49End Sub
当初希望していた「オプションボタンで選択するまではテキストボックスはEnabled.Falseにしたい」という点は、よくよく考えたところ必要ないことがわかりましたので、実装しないことにしました。
またEnabled.Falseにしたテキストボックスについては、背景色をグレーにすることにしました。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/22 11:03
2019/01/22 11:30
2019/01/23 01:14
2019/01/23 01:22