[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBA userform1とuserform2の値を同じにする』(3W)
userform1とuserform2がありそれぞれtextboxやcomboboxがあります。それぞれ何かしら入力されたら片方のuserformと同じ値を入力するにはどうしたらいいでしょうか?
また、片方のuserformに入力されてなかった場合、textboxやcomboboxに任意で入力しその値をもう片方に入力する事もしたいのです。
よろしくお願いします。
< 使用 Excel:unknown、使用 OS:unknown >
考え方の提案だけ。
各UserForm側ではコントロールのイベント等で シート上の特定のセルに値を格納するようにしておけば、 Worksheet_Changeイベントから各UserFormの値を一括して上書き という手法がとれるかな。と思います。 (Worksheet_Changeが嫌なら、Property作ってLet内で指示とかでも)
これなら >片方のuserformに入力されてなかった場合 についても、必要に応じて値を格納してあるセルから拾って来れるのではないかと。 (質問の趣旨取り違えてたらスミマセン)
(白茶) 2018/06/14(木) 11:04
>userform1とuserform2がありそれぞれtextboxやcomboboxがあります。
(1)userformの数は、実際も2個なんですか?
(2)そこに乗っているtextboxやcomboboxは、それぞれ何個あるんですか? ※同じ種類のオブジェクトが2個以上ある場合、userform間の紐づけはどう風に行うんですか? 1種類あたり1個しか無ければ、対応関係は明らかなので、(2)の質問は無視してください。
(半平太) 2018/06/14(木) 16:35
>お互い特定のセルを指定することの方法しかありませんか?
あ、いやいやそんなことはないと思いますよ。 単に「手軽な方法」としての例を挙げただけですので^^;
いずれにせよ値を共有するならUserformの外に格納した方が分かり易いとは思います。
↓セルの代わりに変数に覚えさせ、Worksheet_Changeの代わりにProperty使った例
[Module1](標準モジュール)に記述 Private Text1Value As String Public Property Let Text1(newText As String) Text1Value = newText UserForm1.TextBox1.Text = Text1Value UserForm2.TextBox1.Text = Text1Value End Property
[Userform1]及び[Userform2]に記述 Private Sub TextBox1_Change() Module1.Text1 = TextBox1.Text End Sub
>どちらか片方のみの使用をする場合もあるんですが、 基本的には上の単純な手法でも対応できると思います。 (LoadされててもFormが見えないんなら気にしなくても良い、という意味で)
UserformをNew付きで呼び出したりするのならちょっと話が変わってきますけど...
って事で、私の方はこれで失礼しますね^^;
(白茶) 2018/06/14(木) 16:39
(3W) 2018/06/14(木) 22:19
>白茶さん >ご提示の通りやってみました。思っていた通り出来上がりました。
思い通りにできたですか。 イベントが循環しないかなぁ、なんてちょっと心配していたのですけども。
コントロールの数は全部で5個なら、そんなに多くないですよね。 普通に、イベントプロシージャを書いたらまずいんでしょうか?
’Userform1−−−−−−−−−−−− ’↓ Private Sub TextBox92_Change() If UserForm2.TextBox41.Text <> TextBox92.Text Then UserForm2.TextBox41.Text = TextBox92.Text End If End Sub Private Sub ComboBox1_AfterUpdate() UserForm2.ComboBox1.Text = ComboBox1.Text End Sub Private Sub ComboBox4_AfterUpdate() UserForm2.ComboBox3.Text = ComboBox4.Text End Sub Private Sub ComboBox2_AfterUpdate() UserForm2.ComboBox4.Text = ComboBox2.Text End Sub Private Sub ComboBox3_AfterUpdate() UserForm2.ComboBox5.Text = ComboBox3.Text End Sub
’Userform2−−−−−−−−−−−−− ’↓ Private Sub TextBox41_Change() If UserForm1.TextBox92.Text <> TextBox41.Text Then UserForm1.TextBox92.Text = TextBox41.Text End If End Sub Private Sub ComboBox1_AfterUpdate() UserForm1.ComboBox1.Text = ComboBox1.Text End Sub Private Sub ComboBox3_AfterUpdate() UserForm1.ComboBox4.Text = ComboBox3.Text End Sub Private Sub ComboBox4_AfterUpdate() UserForm1.ComboBox2.Text = ComboBox4.Text End Sub Private Sub ComboBox5_AfterUpdate() UserForm1.ComboBox3.Text = ComboBox5.Text End Sub
(半平太) 2018/06/15(金) 00:06
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.