teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

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

2019/04/04 13:27

投稿

hatena19
hatena19

スコア34367

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

コード修正

2019/04/04 13:27

投稿

hatena19
hatena19

スコア34367

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

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

2019/04/04 13:07

投稿

hatena19
hatena19

スコア34367

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
+ ```