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

回答編集履歴

2

参考リンクの追加

2019/03/12 14:06

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -93,4 +93,8 @@
93
93
  End Sub
94
94
  ```
95
95
 
96
- 呼び出しが1行ですみますし、代入先は、テキストボックスでもラベルでもシートのセルでもなんでもOKになります。
96
+ 呼び出しが1行ですみますし、代入先は、テキストボックスでもラベルでもシートのセルでもなんでもOKになります。
97
+
98
+ 自分のブログでこのコードの動作原理を解説したトピックを書きましたので参考にしてください。
99
+
100
+ [ユーザーフォームで入力ダイアログを作成する - hatena chips](https://hatenachips.blog.fc2.com/blog-entry-522.html)

1

別案の追記

2019/03/12 14:06

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -45,4 +45,52 @@
45
45
  End Sub
46
46
  ```
47
47
 
48
- このように `MSForms.TextBox` として渡せば、どのフォームから呼び出してもそのテキストボックスに代入されます。また、ワークシート上のテキストボックスでも問題なく代入できます。
48
+ このように `MSForms.TextBox` として渡せば、どのフォームから呼び出してもそのテキストボックスに代入されます。また、ワークシート上のテキストボックスでも問題なく代入できます。
49
+
50
+ 別案
51
+ ---
52
+ 自分はこのような時、ユーザーフォームの Property を使って、関数のように使える設計にすることがあります。
53
+
54
+ カレンダーフォーム(frmCalendar2)のコード
55
+ ---
56
+
57
+ ```vba
58
+ Private ckDate As Date
59
+ Private WithEvents myLbl As MSForms.Label
60
+
61
+ Public Property Get GetDate() As Date
62
+ Me.Show
63
+ GetDate = CDate(ckDate)
64
+ Unload Me
65
+ End Property
66
+
67
+ Private Sub myLbl_Click()
68
+ ckDate = myLbl.Caption
69
+ Me.Hide
70
+ End Sub
71
+
72
+ Private Sub UserForm_Initialize()
73
+ Set myLbl = Me.Controls.Add("Forms.Label.1", , True)
74
+ With myLbl
75
+ .Caption = Format(Date, "yyyy/mm/dd")
76
+ .Width = 100
77
+ .Height = 15
78
+ .Left = 20
79
+ .Top = 20
80
+ .BorderColor = &H666666
81
+ .BorderStyle = fmBorderStyleSingle
82
+ .Font.Size = 11
83
+ End With
84
+ End Sub
85
+ ```
86
+
87
+ カレンダーの呼び出しコード
88
+ ---
89
+
90
+ ```vba
91
+ Private Sub btnDispCalendar2_Click()
92
+ Me.TextDate2.Value = frmCalendar2.GetDate()
93
+ End Sub
94
+ ```
95
+
96
+ 呼び出しが1行ですみますし、代入先は、テキストボックスでもラベルでもシートのセルでもなんでもOKになります。