三流君 ken3のmemo置き場

三流プログラマーのメモ書きです。主にVBAやWindowsの話題が多いです

挨拶・自己紹介:
失敗続きのAB型の変わり者 :三流プログラマー Ken3です
フリーのエンジニア・個人事業主です・・と書くと聞こえはイイが(それとなくカッコよく聞こえるが)、 現在は小さな案件の受注請負 と 短期派遣 で 日々つつましく?ほそぼそと暮らしてます。
Ken3三流君の連絡先:
[google formsで連絡する]
上記の問い合わせフォームに質問・感想など気軽に書き込んでください

よく検索されるキーワード: [質問回答XXXXさんへ] [CreateObject] [VBA] [JRA競馬オッズ]

XXXXXさんへ Excel VBA セルに書き込み時にLISTBOXのChangeイベントが発生について

朝からデバッグ Excel リストボックスのイベントについて実験したみた。

朝からデバッグ VBA Excel UserForm リストボックスのイベントについて実験する・・・三流プログラマー の 独り言 ライブ プログラミングほか テスト中 - YouTube
www.youtube.com

1.質問の理解

ユーザフォーム(テキストBOX)からセルに書き込みを行う際、listboxのChangeイベントが発 生しうまく値を書き換えることができません。

(値の変更をフォームより行いたいのですが、セルに書き込み時
にLISTBOXのChangeイベントが発生してうまくいかないです。)

セルに書き込み時Changeイベントを発生させないようにするにはどうすればいいのでしょうか ?
セル書き込み時にLISTボックスCHANGEイベントがなぜ発生するのでしょうか?

宜しくお願いいたします。

userform1のなかにTEXTBOX1~3・変更ボタン・listbox1が配置されてます。

textbox1  セルA列
textbox2  セルB列
textbox3  セルC列

変更ボタン (A列 B列 C列に書かれているデータを変更する)

ユーザフォームの一番したにLISTBOX1が配置されてます。

LISTBOX1のBoundcolumn、Textcolumnの値はともに1です。

-----------------------------------------

Private Sub CommandButton1_Click() '変更ボタン

With ListBox1
t = .ListIndex
Cells(t + 3, 1) = TextBox1.Text '実行後LISTBOX1Changeイベントが発生
Cells(t + 3, 2) = TextBox2.Text '実行後LISTBOX1Changeイベントが発生
Cells(t + 3, 3) = TextBox3.Text '実行後LISTBOX1Changeイベントが発生

End With

End Sub
-----------------------------------------
Private Sub ListBox1_Change() ’リストボックス内を矢印キーで動かすと値が各テキスト ボックスに表示される。

With ListBox1  
TargetRow = .ListIndex
TextBox1.Text = .List(TargetRow, 1) 
TextBox2.Text = .List(TargetRow, 2)
TextBox3.Text = .List(TargetRow, 3)
End With

End Sub
-----------------------------------------
Private Sub UserForm_Initialize()
With ListBox1
ro = 0
ro = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row
.ColumnCount = 5
.ColumnHeads = True
.ColumnWidths = -1
.RowSource = ActiveSheet.Range("A2" & ":o" & ro).Address(external:=True)
.TopIndex = ro
End With
End Sub

2.回答作成

問題が発生したら、同じような事例が無いか検索してみます
検索結果から、それらしいのをみつけたら、
そのキーワードやURLを質問者に教えたり。


3.回答後、気になったので、現場再現してみた
今日の本題は、ここです。

道を聞かれた時、あなたなら?どうしますか?
ア.ここ直進して左側に交番やコンビニあるので他の人に聞いてください
イ.まっすぐ行って目印を探して、右に行くとわかると思います。とだいだいの目標を教える
ウ.親切に一緒に行きましょうといって一緒に行く、可能なら荷物を持ってあげるぉぃぉぃ
エ.わからないんで、タクシー呼んだ方が早いですよ

まぁ、知っている道、知らない道でイロイロとあるとは思いますが。

3.1 てきとうに検索結果を紹介して、不親切だったので少し罪悪感

あの道で(あの回答で)
目的地に付けたのか、少し不安だったので、
実際に自分でも歩いてみようと思います。

3.2 現場を再現
周辺地図、じゃなかった、現場を再現してみる。

3.3 実際に自分で歩いてみる
実際に自分で歩いてみて、道に迷ってみる

3.4 ナビゲート案内が正しいか、確認してみた


4.終わりの挨拶
朝起きたら気になったので、デバッグしてみました

道に迷って、ほかの人に聞いて再チャレンジにならないことを願いつつ、
ライブ配信開始する
朝からデバッグ VBA Excel UserForm リストボックスのイベントについて実験する・・・三流プログラマー の 独り言 ライブ プログラミングほか テスト中 - YouTube
www.youtube.com

テストで作成したコード

Option Explicit

Private flg_BUTTON As Integer  '自分でイベント管理 モジュール内共通変数

Private Sub CommandButton1_Click() '変更ボタン

    Dim t As Integer

    flg_BUTTON = 1  'ボタン内の処理なので1

    With ListBox1
        t = .ListIndex
        Cells(t + 3, 1) = TextBox1.Text '実行後LISTBOX1Changeイベントが発生
        Cells(t + 3, 2) = TextBox2.Text '実行後LISTBOX1Changeイベントが発生
        Cells(t + 3, 3) = TextBox3.Text '実行後LISTBOX1Changeイベントが発生
    
    End With

    flg_BUTTON = 0  '出る前に0にする フラグクリア

End Sub


Private Sub ListBox1_Change()  'リストボックス内を矢印キーで動かすと値が各テキスト ボックスに表示される。

    Dim TargetRow As Integer

    If flg_BUTTON = 1 Then Exit Sub  'ボタンが押された時の_Changeなら何もしないで抜ける


    With ListBox1
        TargetRow = .ListIndex
        TextBox1.Text = .List(TargetRow, 1)
        TextBox2.Text = .List(TargetRow, 2)
        TextBox3.Text = .List(TargetRow, 3)
    End With

End Sub


Private Sub UserForm_Initialize()

    Dim ro As Long

    With ListBox1
        ro = 0
        ro = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row
        .ColumnCount = 5
        .ColumnHeads = True
        .ColumnWidths = -1
        .RowSource = ActiveSheet.Range("A2" & ":o" & ro).Address(external:=True)
        .TopIndex = ro
    End With
    
    flg_BUTTON = 0  'フォーム初期化時も0にする フラグクリア
    
End Sub


解決のヒントとなれば幸いです。 三流プログラマー Ken3
※遠回り、回り道させてしまったらスミマセン。 


質問・感想・クレームなど、
気軽にコメント欄に書いてもらえるとうれしいです。

[Googleフォームにコメントを残す]
↑質問・コメントの入力フォームです、気軽に書いてください


フッター:最後にKen3Videoの動画一覧を紹介します

YouTubeにアップした動画です。他の動画を一瞬でも見てもらえるとさらに嬉しいです。
再生リスト:[三流君Ken3の最新動画]←リストの一覧形式で表示する


また、ブログを見に来てくださいね。ではまたぁ~