回答編集履歴

2

参考リンクの追加

2019/03/12 14:06

投稿

hatena19
hatena19

スコア33790

test CHANGED
@@ -189,3 +189,11 @@
189
189
 
190
190
 
191
191
  呼び出しが1行ですみますし、代入先は、テキストボックスでもラベルでもシートのセルでもなんでもOKになります。
192
+
193
+
194
+
195
+ 自分のブログでこのコードの動作原理を解説したトピックを書きましたので参考にしてください。
196
+
197
+
198
+
199
+ [ユーザーフォームで入力ダイアログを作成する - hatena chips](https://hatenachips.blog.fc2.com/blog-entry-522.html)

1

別案の追記

2019/03/12 14:06

投稿

hatena19
hatena19

スコア33790

test CHANGED
@@ -93,3 +93,99 @@
93
93
 
94
94
 
95
95
  このように `MSForms.TextBox` として渡せば、どのフォームから呼び出してもそのテキストボックスに代入されます。また、ワークシート上のテキストボックスでも問題なく代入できます。
96
+
97
+
98
+
99
+ 別案
100
+
101
+ ---
102
+
103
+ 自分はこのような時、ユーザーフォームの Property を使って、関数のように使える設計にすることがあります。
104
+
105
+
106
+
107
+ カレンダーフォーム(frmCalendar2)のコード
108
+
109
+ ---
110
+
111
+
112
+
113
+ ```vba
114
+
115
+ Private ckDate As Date
116
+
117
+ Private WithEvents myLbl As MSForms.Label
118
+
119
+
120
+
121
+ Public Property Get GetDate() As Date
122
+
123
+ Me.Show
124
+
125
+ GetDate = CDate(ckDate)
126
+
127
+ Unload Me
128
+
129
+ End Property
130
+
131
+
132
+
133
+ Private Sub myLbl_Click()
134
+
135
+ ckDate = myLbl.Caption
136
+
137
+ Me.Hide
138
+
139
+ End Sub
140
+
141
+
142
+
143
+ Private Sub UserForm_Initialize()
144
+
145
+ Set myLbl = Me.Controls.Add("Forms.Label.1", , True)
146
+
147
+ With myLbl
148
+
149
+ .Caption = Format(Date, "yyyy/mm/dd")
150
+
151
+ .Width = 100
152
+
153
+ .Height = 15
154
+
155
+ .Left = 20
156
+
157
+ .Top = 20
158
+
159
+ .BorderColor = &H666666
160
+
161
+ .BorderStyle = fmBorderStyleSingle
162
+
163
+ .Font.Size = 11
164
+
165
+ End With
166
+
167
+ End Sub
168
+
169
+ ```
170
+
171
+
172
+
173
+ カレンダーの呼び出しコード
174
+
175
+ ---
176
+
177
+
178
+
179
+ ```vba
180
+
181
+ Private Sub btnDispCalendar2_Click()
182
+
183
+ Me.TextDate2.Value = frmCalendar2.GetDate()
184
+
185
+ End Sub
186
+
187
+ ```
188
+
189
+
190
+
191
+ 呼び出しが1行ですみますし、代入先は、テキストボックスでもラベルでもシートのセルでもなんでもOKになります。