[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ユーザーフォームの変数を標準モジュールで使用したい』(PTP)
テキストボックスとコマンドボタンがあるユーザーフォームで
テキストボックスに入力した文字を標準モジュールで変数として使用したいのですが、上手く受け渡しができません。
方法を教えてください。
< 使用 Excel:Excel2010、使用 OS:Windows7 >
標準モジュール
Sub Sample() MsgBox UserForm1.TextBox1.Value End Sub
UserForm1(Textbox1が置いてある)
Private Sub UserForm_Click() Call Module1.Sample End Sub
(めざめるパワー) 2021/10/06(水) 11:25
元のコードが長いのでやりたいことをまとめるとこんな感じです。
ユーザーフォーム
Private Sub UserForm_Click()
NAME = TextBox1.Text
Unload UserForm1
End Sub
標準モジュール
Sub test()
Dim NAME As String
UserForm1.Show
MsgBox NAME
End sub
>>めざめるパワー様
例の提示ありがとうございます。
標準モジュール側で
UserForm1.Showを使ってユーザーフォームを開き、
標準モジュールの上記の式以下をCallって出来るのでしょうか。
(PTP) 2021/10/06(水) 11:40
やってみてください
(めざめるパワー) 2021/10/06(水) 11:44
出来ませんでした。
(PTP) 2021/10/06(水) 11:52
グローバル変数経由で渡すという方法があります。
'ユーザーフォーム Private Sub UserForm_Click() NAME = TextBox1.Text Unload UserForm1 call End Sub
'標準モジュール Public NAME As String
Sub test() UserForm1.Show MsgBox NAME End sub
ただ、グローバル変数はできる限り使うべきでないというのがプログラミングセオリーなので
引数で渡すといいでしょう。
'ユーザーフォーム Private Sub UserForm_Click() Dim NAME As String NAME = TextBox1.Text Unload UserForm1 Call sendName(NAME) End Sub
'標準モジュール Sub test() UserForm1.Show End sub
Sub sendName(NAME As String) MsgBox NAME End sub
(hatena) 2021/10/06(水) 11:57
変数受け渡しで調べてみてください。 その上で分からないことがあれば、また聞いてみてください。
http://officetanaka.net/excel/vba/tips/tips94.htm http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_200_050.html
(tkit) 2021/10/06(水) 12:04
UserFormを Unloadしたら、そのメンバーにはアクセスできなくなります。 UserForm側では、Hideだけして後始末は標準モジュール側でしましょう '----- UserForm ------ Private Sub CommandButton1_Click() Me.Hide End Sub '---- 標準モジュール ----- Sub sample() UserForm1.Show MsgBox UserForm1.TextBox1.Text Unload UserForm1 End Sub (´・ω・`) 2021/10/06(水) 12:32
最終的には、下記で紹介しているような Property経由で値を渡すという方法もあります。
https://hatenachips.blog.fc2.com/blog-entry-522.html
'----- UserForm1 ------ Option Explicit Private sResult As String
Public Property Get Result() As String Me.Show vbModal Result = sResult Unload Me End Property
Private Sub UserForm_Click() sResult = Me.TextBox1.Text Me.Hide End Sub
'---- 標準モジュール ----- Sub test() MsgBox UserForm1.Result End Sub
動作原理について上記のリンク先で解説しています。興味があればご参考に。
(hatena) 2021/10/06(水) 12:48
>>(´・ω・`)様
別案の提示ありがとうございました。
(PTP) 2021/10/06(水) 14:30
サイトを巡って、分かりやすそうなところを探し提示したのですが、スルーされてしまいましたね。
こういうことがしたいのでしょうか?
'Formモジュール Function GetUserFormTextBox() As String Me.Show GetTextBox1 = TextBox1.Value End Function
'標準モジュール Sub sample() Dim result As String result = UserForm1.GetUserFormTextBox MsgBox result End Sub
(tkit) 2021/10/06(水) 15:23
修正してください 'Formモジュール Function GetUserFormTextBox() As String Me.Show GetUserFormTextBox = TextBox1.Value Unload Me End Function (tkit) 2021/10/06(水) 15:36
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.