Excel (VBA)

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

 
(Windows 10 Home : その他)
ListBoxのList選択以前に実行してしまう
投稿日時: 23/07/13 13:46:44
投稿者: o_taroh

下記ののように書いてUserForm.Showを実行するとクリックを待たずにActiveCellに或る値が入力されて終わります、ちなみに UserForm_Initialize のEnd Subにブレークポイントを設定してみると確かに実行は確認でき以降をRunさせると希望通りListBoxにリストが表示されクリック待ちの状態が出来ます。
不思議なことに全く同じものを五つ作成してありますが二つはクリック待ちの状態でOKですが三つは実行が先行してしまいます、何をどうすればいいのでしょうか、おねがいします
 
Private Sub ListBox1_Click()
    Application.EnableEvents = False
        ActiveCell = Me.ListBox1.Value
    Application.EnableEvents = True
    Me.Controls("ListBox1").Clear
    Me.Hide
    End
End Sub
 
Private Sub UserForm_Initialize()
    Dim r As Integer, re As Integer
    re = Range("AI5").End(xlDown).Row
    Me.Caption = "電気代"
    Me.StartUpPosition = 0
    Me.Left = 320.95
    Me.Top = 309.75
    With Me.ListBox1
        For r = 5 To re
            .AddItem Cells(r, 35) (AI5〜AI16 にリストが書いてあります)
        Next r
    End With
End Sub

回答
投稿日時: 23/07/13 14:30:13
投稿者: simple

再現しませんでした。
(1)ところで、

    Me.Controls("ListBox1").Clear
    Me.Hide
    End
この3行は必要ですか?
特に、Endというのは問答無用で終了するので、余り使わないほうが良いと聞きます。
使うならExit Subで。
(2)また、終了は、
面倒でも手動、もしくは終了用のコマンドボタン等で意識的に実行させたほうが良いと思います。
 
提示されたほかにListBoxの動作に影響を及ぼすようなプロシージャが書かれている
可能性はありませんか?
ExcelVBAのバグを踏んでいる可能性が無きにしも非ずですが。
 
取り急ぎ、感想レベルで恐縮です

投稿日時: 23/07/13 15:20:30
投稿者: o_taroh

simpleさんありがとうございます。
UserForm.Showでクリック待ち状態にならず、どれか不本意なリストがを選択されていてActiveCell入力が実行されてしまうのではないかと判断してClearをかけてみました、でも駄目でした、UserForm_Initialize のEnd Subにブレークポイントを設定して、再実行すると思惑通りクリック待ちになるのですから、一気にRunするとなぜ不本意で不必要な実行をするのでしょうか、判らず困っています。

投稿日時: 23/07/13 15:27:17
投稿者: o_taroh

リストの選択を全部解除する方法があるでしょうか?

回答
投稿日時: 23/07/13 21:07:18
投稿者: WinArrow

関係ないかもしれないが

引用:

    With Me.ListBox1
        For r = 5 To re
            .AddItem Cells(r, 35) (AI5〜AI16 にリストが書いてあります)
        Next r
    End With


    Me.ListBox1.List = Range(cells(5, "AI"), Cells(re, "AI")).Value
に変更してみてください

回答
投稿日時: 23/07/14 07:33:41
投稿者: WinArrow

Listbox1のタブオーダーが、1番目になっていませんか?

回答
投稿日時: 23/07/15 03:09:31
投稿者: Moko

クリックイベントは思わぬところで発生する場合があるので、
ここは確実に 更新後処理 にしてみては?
 

Private Sub ListBox1_AfterUpdate()
    Application.EnableEvents = False
        ActiveCell = Me.ListBox1.Value
    Application.EnableEvents = True
End Sub

投稿日時: 23/07/15 16:07:42
投稿者: o_taroh

皆さんありがとうございます、実は私の追加コメントに赤字で「お礼」とあったのでもう終わりになってしまったのかと勘違いして、あきらめていまいしばらく見ないでいました申し訳ありません。
 
リストボックスのどれかが青色になっていて選択状態(クリック済み)になっているようです、リストのクリック履歴をクリアする方法があるでしょうか?

回答
投稿日時: 23/07/15 18:28:40
投稿者: WinArrow

対策案(1)
 Clickイベントをやめることえす。
 例
  Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
 Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  
※私は、ListBox1_DblClickをよく使います。
  
リストボックス選択解除の方法
オペレータがクリックしたときと、不本意の実行とを区別できる
を切り分けられたという想定で、
    Me.ListBox1.ListIndex = -1
を事項すれば、選択解除できます。

投稿日時: 23/07/16 08:54:04
投稿者: o_taroh

 
皆さんいろいろとありがとうございました。
WinArrowさん Me.ListBox1.ListIndex = -1 も試みてみましたががだめでした、同じ形式で五つ作ってあるのですが不思議なことに一つだけ正常な動作をします、TabIndex=0 も実行されています、他の四つは不安定な動作をくりかえすだけでした。
私も ListBox1_DblClick で凌ぐことにします、ありがとうございました。