回答編集履歴

3

マークダウンの間違いの修正、脱字修正

2019/04/04 13:27

投稿

hatena19
hatena19

スコア33715

test CHANGED
@@ -62,7 +62,7 @@
62
62
 
63
63
  登録ボタン無効(選択されていない場合、押せないように)
64
64
 
65
- 0.「女」オプションを選択すると、登録ボタン有効
65
+ 0. 「女」オプションを選択すると、登録ボタン有効
66
66
 
67
67
  0. 「その他」オプションを選択した時、テキストボックスが空欄なら登録ボタン無効、入力されていれば、登録ボタン有効
68
68
 
@@ -70,7 +70,7 @@
70
70
 
71
71
  0. 登録ボタンクリックでSheet1 A列の最終行に選択した値を代入
72
72
 
73
- その後、期状態に戻す(オプション非選択、テキスト空欄かつ無効、登録ボタン無効)
73
+ その後、期状態に戻す(オプション非選択、テキスト空欄かつ無効、登録ボタン無効)
74
74
 
75
75
  ```vba
76
76
 

2

コード修正

2019/04/04 13:27

投稿

hatena19
hatena19

スコア33715

test CHANGED
@@ -152,6 +152,8 @@
152
152
 
153
153
  txtOther.Enabled = False
154
154
 
155
+ txtOther.BackColor = &HC0C0C0
156
+
155
157
  cmdRegist.Enabled = True
156
158
 
157
159
  End Sub

1

説明の追記、コード例追加

2019/04/04 13:07

投稿

hatena19
hatena19

スコア33715

test CHANGED
@@ -1,5 +1,173 @@
1
+ > ①UserForm_Initializeでその他のテキストボックス(txtOther)のBackColorがグレー(&HC0C0C0)になっていてほしいのにならない。
2
+
3
+
4
+
1
5
  単純に、`Private Sub UserForm_Intiialize()` の部分のスペルミスかと。
2
6
 
3
7
 
4
8
 
5
9
  正しくは、`Private Sub UserForm_Initialize()`
10
+
11
+
12
+
13
+ > ②実現したいことが実現されない……
14
+
15
+
16
+
17
+ コードが希望のように記述されていないからだと思いますが、
18
+
19
+ 希望のことは下記のどちらですか。
20
+
21
+ - オプションボタンを選択(クリック)したら、すぐにセルに値を代入したい。
22
+
23
+ - 登録ボタンをクリックしたときに、選択されているボタンの値を代入したい。
24
+
25
+
26
+
27
+ 説明では前者のようですし、コードでは後者のように読めます。
28
+
29
+ 普通の設計としては、登録ボタン時に代入かと思います。
30
+
31
+ でないと、「その他」を選択した場合、テキストボックスがその時点で入力可になるので、
32
+
33
+ 空白がセルに代入されることになるし、間違えた場合も修正ができずにセルに追加されて行ってしまいます。
34
+
35
+
36
+
37
+ > ④登録ボタン押下後、オプションボタンもテキストボックスも入力できない状態になってしまう
38
+
39
+
40
+
41
+ 登録ボタン押下で `Enabled = False` してますから当然そうなりますね。
42
+
43
+
44
+
45
+ 他にも、その他選択でテキストボックスが空欄の時に登録ボタンを押すと空白をセルに代入することになったり、「女」を選択しなおしたとき、テキストが有効のままでいいのかと、とか、いろいろインターフェイスとしておかしい部分があると思います。
46
+
47
+
48
+
49
+ もう少し、落ち着いて、本当にやりたいことは何かを整理してみることを推奨します。
50
+
51
+
52
+
53
+ ---
54
+
55
+ 一応、こちらで勝手にやりたいであろうことを想像して、コード例を書いてみました。
56
+
57
+
58
+
59
+ **勝手に推測した仕様**
60
+
61
+ 0. フォームは開いた直後は、オプションボタンはすべて非選択、テキストボックス無効、
62
+
63
+ 登録ボタン無効(選択されていない場合、押せないように)
64
+
65
+ 0.「女」オプションを選択すると、登録ボタン有効
66
+
67
+ 0. 「その他」オプションを選択した時、テキストボックスが空欄なら登録ボタン無効、入力されていれば、登録ボタン有効
68
+
69
+ 0. 「テキストボックス」に入力すれば登録ボタン有効、削除して空欄になると無効
70
+
71
+ 0. 登録ボタンクリックでSheet1 A列の最終行に選択した値を代入
72
+
73
+ その後、期状態に戻す(オプション非選択、テキスト空欄かつ無効、登録ボタン無効)
74
+
75
+ ```vba
76
+
77
+ Option Explicit
78
+
79
+
80
+
81
+ Private selOption As Control
82
+
83
+
84
+
85
+ Private Sub txtOther_Change()
86
+
87
+ If txtOther.Text <> "" Then
88
+
89
+ cmdRegist.Enabled = True
90
+
91
+ Else
92
+
93
+ cmdRegist.Enabled = False
94
+
95
+ End If
96
+
97
+ End Sub
98
+
99
+
100
+
101
+ Private Sub UserForm_Initialize()
102
+
103
+ txtOther.Enabled = False
104
+
105
+ txtOther.BackColor = &HC0C0C0
106
+
107
+ cmdRegist.Enabled = False
108
+
109
+ End Sub
110
+
111
+
112
+
113
+ Private Sub cmdRegist_click()
114
+
115
+ With Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Offset(1)
116
+
117
+ If selOption.Caption = "その他" Then
118
+
119
+ .Value = txtOther.Value
120
+
121
+ Else
122
+
123
+ .Value = selOption.Caption
124
+
125
+ End If
126
+
127
+ End With
128
+
129
+
130
+
131
+ opF.Value = False
132
+
133
+ opF.Enabled = True
134
+
135
+ opOther.Value = False
136
+
137
+ opOther.Enabled = True
138
+
139
+ txtOther.Value = ""
140
+
141
+ Set selOption = Nothing
142
+
143
+ Call UserForm_Initialize
144
+
145
+ End Sub
146
+
147
+
148
+
149
+ Private Sub opF_click()
150
+
151
+ Set selOption = opF
152
+
153
+ txtOther.Enabled = False
154
+
155
+ cmdRegist.Enabled = True
156
+
157
+ End Sub
158
+
159
+
160
+
161
+ Private Sub opOther_click()
162
+
163
+ txtOther.Enabled = True
164
+
165
+ txtOther.BackColor = &HFFFFFF
166
+
167
+ Set selOption = opOther
168
+
169
+ Call txtOther_Change
170
+
171
+ End Sub
172
+
173
+ ```