|
▼年寄り さん:
おはようございます。
>>分かりました。
>>UserForm1では
>> frm.Controls(idx).Value
>>であり、UserForm2では
>> p.Controls(idx).Valueや.Captionですね。
>>
>
>確かにfrmやpの中からはこれで取得できますが、他から(Module1等)からはどうやって取得しますか?
なるほど、色々と方法はありますが・・・、
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=30608;id=excel
ここでのコードに追加して・・・、
userform2のモジュールでは
'===============================================================
Dim c_txt(1 To 20) As Class1 'これは、Publicにはできないので・・
'===============================================================
Private Sub UserForm_Initialize()
Dim p As Page
Dim sz As Double
Dim wk As String
Dim idx As Long
With Me
.Height = 300
.Width = 420
End With
With Controls.Add("Forms.MultiPage.1")
.Top = 75
.Left = 5
.Height = 200
.Width = (9.75 * 40 + 12) + 0.75
.Pages.Remove 1
With .Font
.Name = "MS ゴシック"
.Size = 10
sz = Int(.Size / 0.75) * 0.75
End With
Set p = .Pages(0)
p.Caption = String(Int((Int(.Width / 0.75) * 0.75 - 12.75) / sz), " ")
wk = p.Caption
Mid(wk, 1, 9) = "マルチページ使用例"
p.Caption = wk
p.ScrollBars = 2
p.ScrollHeight = 1000
For idx = 1 To 20
Set c_txt(idx) = New Class1
With c_txt(idx)
.id = idx
Set .txt = p.Controls.Add("Forms.TextBox.1", "text" & idx)
With .txt
.Top = (idx - 1) * 50 + 20
.Left = 30
End With
End With
Next
End With
End Sub
'===========================================================
Property Get f_txt(id As Long) As msforms.TextBox
Set f_txt = c_txt(id).txt
End Property
としておけば、
例えば、
標準モジュールで
'===============================================================
Sub main()
UserForm2.Show vbModeless
End Sub
とモーダレスで表示して、最初のテキストボックスに何か入力してください。
入力後、
別の標準モジュールに予め記述した
'===========================================================
Sub test()
MsgBox UserForm2.f_txt(1).Text
End Sub
これを実行してみてください
(モーダレスで表示すれば
「ツール」--「マクロ」の手順で testは実行できますよね?)。
最初のテキストボックスの内容が表示されると思います。
他にも方法はありますが、クラスを使っているので
このようにしました。
確認してください
尚、もし うまくいかない場合は、投稿は夜になってしまいます。
|
|