過去ログ

                                Page     207
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼複数ユーザーフォームの最前表示指定  会社員 02/10/10(木) 12:08
   ┗Re:複数ユーザーフォームの最前表示指定  ichinose 02/10/10(木) 17:31
      ┗Re:複数ユーザーフォームの最前表示指定  会社員 02/10/10(木) 17:50
         ┗Re:複数ユーザーフォームの最前表示指定  ichinose 02/10/10(木) 22:47
            ┗Re:複数ユーザーフォームの最前表示指定  会社員 02/10/11(金) 11:41
               ┗Re:複数ユーザーフォームの最前表示指定  ichinose 02/10/11(金) 11:58
                  ┗Re:時間があるときで結構ですので...  会社員 02/10/11(金) 13:14
                     ┗Re:時間があるときで結構ですので...  ichinose 02/10/12(土) 11:13
                        ┗ご親切にありがとうございました。◎です!  会社員 02/10/15(火) 22:01

 ───────────────────────────────────────
 ■題名 : 複数ユーザーフォームの最前表示指定
 ■名前 : 会社員
 ■日付 : 02/10/10(木) 12:08
 -------------------------------------------------------------------------
   はじめまして

VBAの勉強を始めました。

ちょっと分からなくなってしいましたので、
おたずねします。

複数のユーザーフォームを表示したいと思っています。
メインのユーザーフォーム(1)のコマンドボタンをClickして、
別のフォーム(2)を開いた時(フォーム(2).Show)
なぜかフォーム(1)の背面にフォーム(2)が隠れてしまいます。
フォーム(2)をアクティブ(最前面)にするコードを教えてください。

宜しくお願いします。
 ───────────────────────────────────────  ■題名 : Re:複数ユーザーフォームの最前表示指定  ■名前 : ichinose  ■日付 : 02/10/10(木) 17:31  -------------------------------------------------------------------------
   ▼会社員 さん:
こんばんは。
>VBAの勉強を始めました。
>
>ちょっと分からなくなってしいましたので、
>おたずねします。
>
>複数のユーザーフォームを表示したいと思っています。
>メインのユーザーフォーム(1)のコマンドボタンをClickして、
>別のフォーム(2)を開いた時(フォーム(2).Show)
>なぜかフォーム(1)の背面にフォーム(2)が隠れてしまいます。
>フォーム(2)をアクティブ(最前面)にするコードを教えてください。
通常、フォーム1とフォーム2が同じ大きさだったばあい、フォーム1が隠れて見えなくなってしまうんですが・・・、コードを見せていただけますか?
 ───────────────────────────────────────  ■題名 : Re:複数ユーザーフォームの最前表示指定  ■名前 : 会社員  ■日付 : 02/10/10(木) 17:50  -------------------------------------------------------------------------
   ▼ichinose さん:
こんばんは。

同じ職場の123がお世話になっています。
私も始めてみました。

以下のコードは、データ入力というユーザーフォームにある
品名というTextBoxの記述と、ActivesheetのActiveCell(品名)の
内容が違う場合に品名修正というユーザーフォームが立ち上がる
というものです。
(以下のコードはデータ入力というユーザーフォームに書いてあるものです)

Private Sub T_品名_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If ActiveCell.Value <> T_品名 Then
氏名修正.Show
 With 品名修正
  .T_修正前品名.Value = ActiveCell.Value
  .T_修正後品名.Value = データ入力.T_品名.Value
  .T_修正後品名.SetFocus
 End With
End If
End Sub

* フォーム1は「.Hide」をしないことにしています。

如何なものでしょうか?

>通常、フォーム1とフォーム2が同じ大きさだったばあい、フォーム1が隠れて見えなくなってしまうんですが・・・、コードを見せていただけますか?
 ───────────────────────────────────────  ■題名 : Re:複数ユーザーフォームの最前表示指定  ■名前 : ichinose  ■日付 : 02/10/10(木) 22:47  -------------------------------------------------------------------------
   ▼会社員 さん:
こんばんは。

>以下のコードは、データ入力というユーザーフォームにある
>品名というTextBoxの記述と、ActivesheetのActiveCell(品名)の
>内容が違う場合に品名修正というユーザーフォームが立ち上がる
>というものです。
>(以下のコードはデータ入力というユーザーフォームに書いてあるものです)
>
>Private Sub T_品名_Exit(ByVal Cancel As MSForms.ReturnBoolean)
>If ActiveCell.Value <> T_品名 Then
>氏名修正.Show
'これ、品名修正.showですね。
> With 品名修正
>  .T_修正前品名.Value = ActiveCell.Value
>  .T_修正後品名.Value = データ入力.T_品名.Value
>  .T_修正後品名.SetFocus
> End With
cancel=true
>End If
>End Sub
モーダレスモードでフォーム(品名修正)を表示していますよね?コード指定ではないとしたら、フォームのプロパティのShowModalがFalseになっていませんか?
品名修正というフォームをどうしてもモーダレスモードでの表示でなければ仕様上、問題があるのですか?上記の問題の簡単解決はモーダルモードで品名修正というフォームを表示させることですが・・・。
モーダレスでどうしてもというなら、上記のCancel=Trueで前面に表示はされるはずですが、全体を把握していないので、はっきりしたことは言えませんが、
テキストボックスのExitイベントでの上記のコードの場合、ここで仮に前面表示が実現できても「データ入力」というユーザーフォームを非表示(終了)にするときなど工夫が必要かもしれません。
 ───────────────────────────────────────  ■題名 : Re:複数ユーザーフォームの最前表示指定  ■名前 : 会社員  ■日付 : 02/10/11(金) 11:41  -------------------------------------------------------------------------
   ▼ichinose さん:
おはようございます。

ご察しの通り、品名修正(フォーム)プロパティでモーダレスモードです。
データ入力のT_品名.Valueを品名修正(フォーム)の修正後品名にもってこようと
しています。⇒ モーダレスモードじゃないとできないみたいです。

結局、ichinoseさん言われた「Cancel=True」を入れることにしました。
現状では特に問題はありません。

ありがとうございました。

それと、あつかましいお願いなのですが、
Cancel=True の意味を教えていただけませんでしょうか。
宜しくお願いします。

>>Private Sub T_品名_Exit(ByVal Cancel As MSForms.ReturnBoolean)
>>If ActiveCell.Value <> T_品名 Then
>>氏名修正.Show
>'これ、品名修正.showですね。
>> With 品名修正
>>  .T_修正前品名.Value = ActiveCell.Value
>>  .T_修正後品名.Value = データ入力.T_品名.Value
>>  .T_修正後品名.SetFocus
>> End With
> cancel=true
>>End If
>>End Sub
>モーダレスモードでフォーム(品名修正)を表示していますよね?コード指定ではないとしたら、フォームのプロパティのShowModalがFalseになっていませんか?
>品名修正というフォームをどうしてもモーダレスモードでの表示でなければ仕様上、問題があるのですか?上記の問題の簡単解決はモーダルモードで品名修正というフォームを表示させることですが・・・。
>モーダレスでどうしてもというなら、上記のCancel=Trueで前面に表示はされるはずですが、全体を把握していないので、はっきりしたことは言えませんが、
>テキストボックスのExitイベントでの上記のコードの場合、ここで仮に前面表示が実現できても「データ入力」というユーザーフォームを非表示(終了)にするときなど工夫が必要かもしれません。
 ───────────────────────────────────────  ■題名 : Re:複数ユーザーフォームの最前表示指定  ■名前 : ichinose  ■日付 : 02/10/11(金) 11:58  -------------------------------------------------------------------------
   ▼会社員 さん:
>ご察しの通り、品名修正(フォーム)プロパティでモーダレスモードです。
>データ入力のT_品名.Valueを品名修正(フォーム)の修正後品名にもってこようと
>しています。⇒ モーダレスモードじゃないとできないみたいです。
そんなことないと思いますよ。ごめんなさい、本日、時間がないため、コード載せられませんが、入力データ(最初に表示している)フォームにPublic変数を設定すれば可能だと思いますが・・・。


>結局、ichinoseさん言われた「Cancel=True」を入れることにしました。
>現状では特に問題はありません。
>
>ありがとうございました。
>
>それと、あつかましいお願いなのですが、
>Cancel=True の意味を教えていただけませんでしょうか。
>宜しくお願いします。
Cancel=True により、このTexboxからの別のコントロールにフォーカスを移すことを
キャンセルします。

>>>Private Sub T_品名_Exit(ByVal Cancel As MSForms.ReturnBoolean)
>>>If ActiveCell.Value <> T_品名 Then
>>>氏名修正.Show
>>'これ、品名修正.showですね。
>>> With 品名修正
>>>  .T_修正前品名.Value = ActiveCell.Value
>>>  .T_修正後品名.Value = データ入力.T_品名.Value
>>>  .T_修正後品名.SetFocus
>>> End With
>> cancel=true
>>>End If
>>>End Sub
>>モーダレスモードでフォーム(品名修正)を表示していますよね?コード指定ではないとしたら、フォームのプロパティのShowModalがFalseになっていませんか?
>>品名修正というフォームをどうしてもモーダレスモードでの表示でなければ仕様上、問題があるのですか?上記の問題の簡単解決はモーダルモードで品名修正というフォームを表示させることですが・・・。
>>モーダレスでどうしてもというなら、上記のCancel=Trueで前面に表示はされるはずですが、全体を把握していないので、はっきりしたことは言えませんが、
>>テキストボックスのExitイベントでの上記のコードの場合、ここで仮に前面表示が実現できても「データ入力」というユーザーフォームを非表示(終了)にするときなど工夫が必要かもしれません。
 ───────────────────────────────────────  ■題名 : Re:時間があるときで結構ですので...  ■名前 : 会社員  ■日付 : 02/10/11(金) 13:14  -------------------------------------------------------------------------
   ▼ichinose さん:
こんにちは。

>そんなことないと思いますよ。ごめんなさい、本日、時間がないため、コード載せられませんが、入力データ(最初に表示している)フォームにPublic変数を設定すれば可能だと思いますが・・・。

すみません 時間があるときで結構ですので、教えて頂けますでしょうか。
まだ、言われていることが、理解できないでいます。
(お恥ずかしい話ですが、参考書を読んでも、応用する要領が分かりません。)

>>それと、あつかましいお願いなのですが、
>>Cancel=True の意味を教えていただけませんでしょうか。
>>宜しくお願いします。
>Cancel=True により、このTexboxからの別のコントロールにフォーカスを移すことを
>キャンセルします。

なるほど、ありがとうございました。
 ───────────────────────────────────────  ■題名 : Re:時間があるときで結構ですので...  ■名前 : ichinose  ■日付 : 02/10/12(土) 11:13  -------------------------------------------------------------------------
   ▼会社員 さん:
こんにちは。
>>そんなことないと思いますよ。ごめんなさい、本日、時間がないため、コード載せられませんが、入力データ(最初に表示している)フォームにPublic変数を設定すれば可能だと思いますが・・・。
と、申し上げましたが、他にも方法は色々あると思いますし、変数を使用しなくても処理によっては可能な場合もあります。
今回は、変数を使った場合で記述しましたが、「フォームにPublic変数」ではなく、標準モジュールに配置しました。

全体が見えないので、私のほうで勝手な仕様にしてみましたので・・。
1.「入力データ」フォームは、モーダレスモード
2.「品名修正」フォームは、モーダルモード
 2.1 品名修正フォームのコントロール
   T_修正前品名   テキストボックス(TabstopプロパティをFalseに設定)
   T_修正後品名   テキストボックス
   CommandButton1  コマンドボタン(このボタンを押されたときのみ、T_修正後品名の内容を「入力データ」フォームのT_品名(テキストボックス)に反映させる)
標準モジュールで、
'============================================================
  Public Type 修正内容
   func As Integer
'0:修正キャンセル
'1:修正確定
   修正前 As String
   修正後 As String
   End Type
  Public ment_inf As 修正内容
'本当は、↑「入力データ」フォームに宣言したいのですが、ユーザー定義が許可されないので・・
'=============================================================
Sub test()
  入力データ.Show
End Sub

「入力データ」フォームモジュールで、
'=============================================================
Private Sub T_品名_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  If ActiveCell.Value <> T_品名 Then
    With ment_inf
     .func = 0
     .修正前 = ActiveCell.Value
     .修正後 = T_品名.Text
     品名修正.Show
     If .func = 1 Then
      T_品名.Text = .修正後
      End If
     End With
    End If
End Sub

「品名修正」フォームモジュールで、

'======================================================================
Private Sub CommandButton1_Click()
With ment_inf
 .修正後 = T_修正後品名.Text
 .func = 1
 End With
Unload Me
End Sub
'======================================================================
Private Sub UserForm_Initialize()
  With ment_inf
   T_修正前品名.Text = .修正前
   T_修正後品名.Text = .修正後
   End With
End Sub

これだと、モーダルモードでも修正内容を「入力データ」フォームのT_品名に更新できますが・・・。
 ───────────────────────────────────────  ■題名 : ご親切にありがとうございました。◎です!  ■名前 : 会社員  ■日付 : 02/10/15(火) 22:01  -------------------------------------------------------------------------
   ▼ichinose さん:
こんにちは。

お忙しいのに 本当にありがとうございました。

出来ました。◎です。
私には 未だ記述の意味が良く分かりませんが、
とりあえず引用させていただきました。

本当に本当にありがとうございました。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 207