朝からデバッグ 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
※遠回り、回り道させてしまったらスミマセン。