Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Professional : Excel 2010)
二つの重なったフォームのリストボックスでダブルクリックすると
投稿日時: 19/01/08 02:15:48
投稿者: Atushi

二つのフォームにそれぞれに大きなリストボックスを配置しています。
一つのフォームから値を取得するためにもう一つのフォームを開きます。
この時二つのフォームが重なり、それぞれのリストボックスも重なった状態になます。
この状態で上のフォームのリストボックスをダブルクリックします。
ダブルクリック時のコマンドでは値の取得と上になったフォームを閉じるようにしています。
上になったフォームが閉じると下のフォームのリストボックスを選択してしまいます。
いろいろコードを変えてみましたが、下のフォームのリストボックスを選択します。
下のフォームに影響のないダブルクリックでの操作を何とか実現したいのです。
よろしくお願いします。

回答
投稿日時: 19/01/08 09:27:16
投稿者: Suzu

+Form_B ---+
| listB    |
|          |-Form_A -+
+----------+ listA   |
         |           |
         +-----------+

 
FormA の ListA ダブルクリック でFormB を開き
上記の様な フォームの重なりになる。
 
その状態で、
FormB の listB ダブルクリック で
  Form_B を閉じると、
FormA がアクティブになり、listA の値が書き換わっている。
 
listA の値が書き換わらない様にしたい という事でしょうか?

投稿日時: 19/01/08 22:40:14
投稿者: Atushi

 Suzu様ご丁寧な図ありがとうございます。
 
 多分、その通りです。
 FormB のLlistB ダブルクリック でLlistAがその下に重なっていると、
 FormB を閉じた場合に、丁度マウス位置のListA を選んでしまいます。
 重ならなければよいのですが、重ならないようにはできないのです。
 ダブルクリックはFormB のListB に行っただけなのに、それに終わらないのです。
 ListA をEnableでコントロールすることも考えましたが、他に知識がないものかと。

回答
投稿日時: 19/01/09 07:26:28
投稿者: Suzu

1. Form_Aから、Form_B を開いたとき、Form_Bは開いたままで、Form_A の操作をする事は可能ですか?
 
2. Form A から、Form B を開く時のコードはどのようなコードになっていますか?
   また、そのコードは、Form_A のどんな契機に書かれていますか?
 
3. Form_B をデザインビューで開いて
 
   フォームのプロパティ
     ・ポップアップ
     ・作業ウィンドウの固定
    はどうなっていますか?
 
4. Form_B を閉じる時の契機は、listB のダブルクリック時イベントで間違いありませんか?
   そのコードを提示ください。

回答
投稿日時: 19/01/09 13:49:10
投稿者: hatena
投稿者のウェブサイトに移動

サンプルを作成して確認してみました。
たしかにそうなりますね。
 

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    '値の取得
    Cancel = True
    Unload Me
End Sub

 
とイベントをキャンセルすればいいかと思いましたが、だめでした。
しょうがないので、下記のようにフラグをたてて、マウスアップで閉じればOKでした。
 
Private dblClk As Boolean
Private dblClk As Boolean

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    '値の取得
    dblClk = True
End Sub

Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    If dblClk Then Unload Me
End Sub

投稿日時: 19/01/10 00:59:01
投稿者: Atushi

FormBのコードです。
Private Sub ListBoxB_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
  With Me.ListBoxB
   If .ListIndex < 0 Then
    Exit Sub
   Else
      FormA.Label.Caption = .List(.ListIndex, 1)
   End If
  End With
    Unload Me
 End Sub
これでFormBの役割は終わり、FormAにフォーカスが移動します。
ダブルクリックのマウス位置がFormAのListBoxAの上だとListBoxAの同じ位置の行をクリックしてしまいます。
Excelはこういう仕様なのでしょう。
 
hatena様のコードにしたらうまくいきました。
マウスアップの時にフォーカスが移動するとListBoxAをクリックしません。
 
お二人とも貴重な時間を使っていただき、ありがとうございました。