Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1071 / 13645 ツリー ←次へ | 前へ→

【76470】2つのuserform 匿名 14/12/7(日) 22:58 質問[未読]
【76471】Re:2つのuserform カリーニン 14/12/7(日) 23:24 発言[未読]
【76472】Re:2つのuserform カリーニン 14/12/7(日) 23:26 発言[未読]
【76473】Re:2つのuserform カリーニン 14/12/7(日) 23:30 発言[未読]
【76474】Re:2つのuserform ichinose 14/12/8(月) 6:41 発言[未読]
【76475】Re:2つのuserform 匿名 14/12/8(月) 12:46 お礼[未読]
【76476】Re:2つのuserform ichinose 14/12/8(月) 18:40 発言[未読]
【76477】Re:2つのuserform 匿名 14/12/9(火) 20:23 お礼[未読]

【76470】2つのuserform
質問  匿名  - 14/12/7(日) 22:58 -

引用なし
パスワード
   checkbox1が1つ目のuserform上にある
  true だと 2つ目のuserformが開く

ここまではOK。

2つ目のuserformを閉じると 1のuserformのcheckboxをflaseにしたい。

どういった手法を使えばいいのでしょうか?

【76471】Re:2つのuserform
発言  カリーニン  - 14/12/7(日) 23:24 -

引用なし
パスワード
   >true だと 2つ目のuserformが開く

どのタイミングで二つ目のユーザーフォームを開くのでしょう?
チェックボックスにチェックを入れたときのイベントで、ですか?

【76472】Re:2つのuserform
発言  カリーニン  - 14/12/7(日) 23:26 -

引用なし
パスワード
   >ここまではOK。

でしたね。私のレスはスルーしてください。
失礼しました。

【76473】Re:2つのuserform
発言  カリーニン  - 14/12/7(日) 23:30 -

引用なし
パスワード
   二つ目の'ユーザーフォームのQueryCloseイベントに記述します。

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
UserForm1.CheckBox1.Value = False
End Sub

【76474】Re:2つのuserform
発言  ichinose  - 14/12/8(月) 6:41 -

引用なし
パスワード
   >checkbox1が1つ目のuserform上にある
>  true だと 2つ目のuserformが開く
>ここまではOK。
出来てるコードも記述してください。


この二つ目のユーザーフォームをUserForm2 だとします。


このcheckbox1をTrueにしたら、直ちに UserForm2をモーダルモードで表示するのだとすれば、


Private Sub CheckBox1_Click()
  If CheckBox1.Value Then
    UserForm2.show
    unload UserForm2
    CheckBox1.Value=false
  End If
End Sub

これでよいですね!!


>Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
> UserForm1.CheckBox1.Value = False
>End Sub

これでも作動しますけど、この記述だとUserForm2の呼び出し元は、
UserForm1だと限定してしまいます。
UserForm2は、他のモジュールからも呼び出されるかもしれません。
今は、そうでなくても将来はそのような仕様になるかもしれません。


オブジェクトの独立性を高めるという事を考慮すると、

UserForm1.CheckBox1.Value = False

というコードは、UserForm2の外で行うのが良いと思いますよ!!


UserForm2がモーダレスモードで表示する場合は、簡単ではないですが、
それでも
オブジェクトの独立性を高めるという事を考えると

UserForm1.CheckBox1.Value = False

というコードは、UserForm2の外のモジュールに記述できる環境を作成するほうが
良いと思いますよ

【76475】Re:2つのuserform
お礼  匿名  - 14/12/8(月) 12:46 -

引用なし
パスワード
   皆様ありがとうございます。
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
  call ch_no()
End Sub

Sub ch_no()
 UserForm1.CheckBox1.Value = False
End Sub

とりあえずこのような感じでやっていきます。
いろいろ試してみます。

▼ichinose さん:
>>checkbox1が1つ目のuserform上にある
>>  true だと 2つ目のuserformが開く
>>ここまではOK。
>出来てるコードも記述してください。
>
>
>この二つ目のユーザーフォームをUserForm2 だとします。
>
>
>このcheckbox1をTrueにしたら、直ちに UserForm2をモーダルモードで表示するのだとすれば、
>
>
>Private Sub CheckBox1_Click()
>  If CheckBox1.Value Then
>    UserForm2.show
>    unload UserForm2
>    CheckBox1.Value=false
>  End If
>End Sub
>
>これでよいですね!!
>
>
>>Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
>> UserForm1.CheckBox1.Value = False
>>End Sub
>
>これでも作動しますけど、この記述だとUserForm2の呼び出し元は、
>UserForm1だと限定してしまいます。
>UserForm2は、他のモジュールからも呼び出されるかもしれません。
>今は、そうでなくても将来はそのような仕様になるかもしれません。
>
>
>オブジェクトの独立性を高めるという事を考慮すると、
>
>UserForm1.CheckBox1.Value = False
>
>というコードは、UserForm2の外で行うのが良いと思いますよ!!
>
>
>UserForm2がモーダレスモードで表示する場合は、簡単ではないですが、
>それでも
>オブジェクトの独立性を高めるという事を考えると
>
>UserForm1.CheckBox1.Value = False
>
>というコードは、UserForm2の外のモジュールに記述できる環境を作成するほうが
>良いと思いますよ

【76476】Re:2つのuserform
発言  ichinose  - 14/12/8(月) 18:40 -

引用なし
パスワード
   >Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
>  call ch_no()
>End Sub
>


>Sub ch_no()
> UserForm1.CheckBox1.Value = False
>End Sub


>
>とりあえずこのような感じでやっていきます。
>いろいろ試してみます。

>>オブジェクトの独立性を高めるという事を考慮すると、
>>
>>UserForm1.CheckBox1.Value = False
>>
>>というコードは、UserForm2の外で行うのが良いと思いますよ!!

提示された ch_no というプロシジャーを 別のモジュール(標準モジュール等)に記述したということでしょうか?

私が申し上げた オブジェクトの独立性を高める というのは、
そういうことではありません。


が、今回は よしとしましょう。

モジュールを評価する指標に強度(凝集度)と結合度というものがある 
ということを時間があったら調べてみてください。

この先、VBAを勉強されていくなら、いつかまた この件で意見交換を
することもあるでしょう。

【76477】Re:2つのuserform
お礼  匿名  - 14/12/9(火) 20:23 -

引用なし
パスワード
   今の私には言われていることがわかりません。

勉強していきます。
なかなか深いですね。

ここまで提示してくださるのはありがたいです。


▼ichinose さん:
>>Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
>>  call ch_no()
>>End Sub
>>
>
>
>>Sub ch_no()
>> UserForm1.CheckBox1.Value = False
>>End Sub
>
>
>>
>>とりあえずこのような感じでやっていきます。
>>いろいろ試してみます。
>
>>>オブジェクトの独立性を高めるという事を考慮すると、
>>>
>>>UserForm1.CheckBox1.Value = False
>>>
>>>というコードは、UserForm2の外で行うのが良いと思いますよ!!
>
>提示された ch_no というプロシジャーを 別のモジュール(標準モジュール等)に記述したということでしょうか?
>
>私が申し上げた オブジェクトの独立性を高める というのは、
>そういうことではありません。
>
>
>が、今回は よしとしましょう。
>
>モジュールを評価する指標に強度(凝集度)と結合度というものがある 
>ということを時間があったら調べてみてください。
>
>この先、VBAを勉強されていくなら、いつかまた この件で意見交換を
>することもあるでしょう。

1071 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free