回答編集履歴
3
マークダウンの間違いの修正、脱字修正
answer
CHANGED
@@ -30,11 +30,11 @@
|
|
30
30
|
**勝手に推測した仕様**
|
31
31
|
0. フォームは開いた直後は、オプションボタンはすべて非選択、テキストボックス無効、
|
32
32
|
登録ボタン無効(選択されていない場合、押せないように)
|
33
|
-
0.「女」オプションを選択すると、登録ボタン有効
|
33
|
+
0. 「女」オプションを選択すると、登録ボタン有効
|
34
34
|
0. 「その他」オプションを選択した時、テキストボックスが空欄なら登録ボタン無効、入力されていれば、登録ボタン有効
|
35
35
|
0. 「テキストボックス」に入力すれば登録ボタン有効、削除して空欄になると無効
|
36
36
|
0. 登録ボタンクリックでSheet1 A列の最終行に選択した値を代入
|
37
|
-
その後、期状態に戻す(オプション非選択、テキスト空欄かつ無効、登録ボタン無効)
|
37
|
+
その後、初期状態に戻す(オプション非選択、テキスト空欄かつ無効、登録ボタン無効)
|
38
38
|
```vba
|
39
39
|
Option Explicit
|
40
40
|
|
2
コード修正
answer
CHANGED
@@ -75,6 +75,7 @@
|
|
75
75
|
Private Sub opF_click()
|
76
76
|
Set selOption = opF
|
77
77
|
txtOther.Enabled = False
|
78
|
+
txtOther.BackColor = &HC0C0C0
|
78
79
|
cmdRegist.Enabled = True
|
79
80
|
End Sub
|
80
81
|
|
1
説明の追記、コード例追加
answer
CHANGED
@@ -1,3 +1,87 @@
|
|
1
|
+
> ①UserForm_Initializeでその他のテキストボックス(txtOther)のBackColorがグレー(&HC0C0C0)になっていてほしいのにならない。
|
2
|
+
|
1
3
|
単純に、`Private Sub UserForm_Intiialize()` の部分のスペルミスかと。
|
2
4
|
|
3
|
-
正しくは、`Private Sub UserForm_Initialize()`
|
5
|
+
正しくは、`Private Sub UserForm_Initialize()`
|
6
|
+
|
7
|
+
> ②実現したいことが実現されない……
|
8
|
+
|
9
|
+
コードが希望のように記述されていないからだと思いますが、
|
10
|
+
希望のことは下記のどちらですか。
|
11
|
+
- オプションボタンを選択(クリック)したら、すぐにセルに値を代入したい。
|
12
|
+
- 登録ボタンをクリックしたときに、選択されているボタンの値を代入したい。
|
13
|
+
|
14
|
+
説明では前者のようですし、コードでは後者のように読めます。
|
15
|
+
普通の設計としては、登録ボタン時に代入かと思います。
|
16
|
+
でないと、「その他」を選択した場合、テキストボックスがその時点で入力可になるので、
|
17
|
+
空白がセルに代入されることになるし、間違えた場合も修正ができずにセルに追加されて行ってしまいます。
|
18
|
+
|
19
|
+
> ④登録ボタン押下後、オプションボタンもテキストボックスも入力できない状態になってしまう
|
20
|
+
|
21
|
+
登録ボタン押下で `Enabled = False` してますから当然そうなりますね。
|
22
|
+
|
23
|
+
他にも、その他選択でテキストボックスが空欄の時に登録ボタンを押すと空白をセルに代入することになったり、「女」を選択しなおしたとき、テキストが有効のままでいいのかと、とか、いろいろインターフェイスとしておかしい部分があると思います。
|
24
|
+
|
25
|
+
もう少し、落ち着いて、本当にやりたいことは何かを整理してみることを推奨します。
|
26
|
+
|
27
|
+
---
|
28
|
+
一応、こちらで勝手にやりたいであろうことを想像して、コード例を書いてみました。
|
29
|
+
|
30
|
+
**勝手に推測した仕様**
|
31
|
+
0. フォームは開いた直後は、オプションボタンはすべて非選択、テキストボックス無効、
|
32
|
+
登録ボタン無効(選択されていない場合、押せないように)
|
33
|
+
0.「女」オプションを選択すると、登録ボタン有効
|
34
|
+
0. 「その他」オプションを選択した時、テキストボックスが空欄なら登録ボタン無効、入力されていれば、登録ボタン有効
|
35
|
+
0. 「テキストボックス」に入力すれば登録ボタン有効、削除して空欄になると無効
|
36
|
+
0. 登録ボタンクリックでSheet1 A列の最終行に選択した値を代入
|
37
|
+
その後、期状態に戻す(オプション非選択、テキスト空欄かつ無効、登録ボタン無効)
|
38
|
+
```vba
|
39
|
+
Option Explicit
|
40
|
+
|
41
|
+
Private selOption As Control
|
42
|
+
|
43
|
+
Private Sub txtOther_Change()
|
44
|
+
If txtOther.Text <> "" Then
|
45
|
+
cmdRegist.Enabled = True
|
46
|
+
Else
|
47
|
+
cmdRegist.Enabled = False
|
48
|
+
End If
|
49
|
+
End Sub
|
50
|
+
|
51
|
+
Private Sub UserForm_Initialize()
|
52
|
+
txtOther.Enabled = False
|
53
|
+
txtOther.BackColor = &HC0C0C0
|
54
|
+
cmdRegist.Enabled = False
|
55
|
+
End Sub
|
56
|
+
|
57
|
+
Private Sub cmdRegist_click()
|
58
|
+
With Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Offset(1)
|
59
|
+
If selOption.Caption = "その他" Then
|
60
|
+
.Value = txtOther.Value
|
61
|
+
Else
|
62
|
+
.Value = selOption.Caption
|
63
|
+
End If
|
64
|
+
End With
|
65
|
+
|
66
|
+
opF.Value = False
|
67
|
+
opF.Enabled = True
|
68
|
+
opOther.Value = False
|
69
|
+
opOther.Enabled = True
|
70
|
+
txtOther.Value = ""
|
71
|
+
Set selOption = Nothing
|
72
|
+
Call UserForm_Initialize
|
73
|
+
End Sub
|
74
|
+
|
75
|
+
Private Sub opF_click()
|
76
|
+
Set selOption = opF
|
77
|
+
txtOther.Enabled = False
|
78
|
+
cmdRegist.Enabled = True
|
79
|
+
End Sub
|
80
|
+
|
81
|
+
Private Sub opOther_click()
|
82
|
+
txtOther.Enabled = True
|
83
|
+
txtOther.BackColor = &HFFFFFF
|
84
|
+
Set selOption = opOther
|
85
|
+
Call txtOther_Change
|
86
|
+
End Sub
|
87
|
+
```
|