[[20180613232105]] 『VBA userform1とuserform2の値を同じにする』(3W) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『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


お互い特定のセルを指定することの方法しかありませんか?
どちらか片方のみの使用をする場合もあるんですが、お互い開く場合もう一度入力する手間を省くことを考えました。
ほかに思いつくまでこの方法で扱いたいと思います。
ありがとうございました。
(3W) 2018/06/14(木) 14:13

 >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


半平太さん
ご回答ありがとうございます。userformの数は2つあります。詳しく書きますと
・userform1 textbox92 = userform2 textbox41
・userform1 ComboBox1 = userform2 ComboBox1
・userform1 ComboBox4 = userform2 ComboBox3
・userform1 ComboBox2 =userform2 ComboBox4
・userform1 ComboBox3 =userform2 ComboBox5
とバラバラな組み合わせですがを紐づけしたいのです。
よろしくお願いします。

(3W) 2018/06/14(木) 22:19


白茶さん
ご提示の通りやってみました。思っていた通り出来上がりました。あとはコードの意味を勉強して理解したいと思います。
大変ありがとうございました。
(3W) 2018/06/14(木) 22:24

 >白茶さん 
 >ご提示の通りやってみました。思っていた通り出来上がりました。

 思い通りにできたですか。
 イベントが循環しないかなぁ、なんてちょっと心配していたのですけども。

 コントロールの数は全部で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


半平太さん
ご回答ありがとうございます。
こちらも思っていたとおりできました。<>の使用をご指導されましたので他にやりたかったことが思いつきました。
大変ありがとうございました。
(3W) 2018/06/15(金) 13:49

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.