Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


13604 / 13645 ツリー ←次へ | 前へ→

【4472】2つのコンボボックスを連動させるには? はらへりおおかみ 03/3/21(金) 18:16 質問
【4477】Re:2つのコンボボックスを連動させるには? Hirofumi 03/3/22(土) 8:10 回答
【4487】Re:2つのコンボボックスを連動させるには? はらへりおおかみ 03/3/22(土) 17:37 お礼
【4488】Re:2つのコンボボックスを連動させるには? Hirofumi 03/3/22(土) 19:14 発言
【4674】Re:2つのコンボボックスを連動させるには? はらへりおおかみ 03/4/1(火) 23:47 お礼

【4472】2つのコンボボックスを連動させるには?
質問  はらへりおおかみ  - 03/3/21(金) 18:16 -

引用なし
パスワード
   コンボボックスについて質問があります。
ComboBox1(管理番号), ComboBoX2(図書名)用の2つのコンボボックスを設定していて、それぞれ入力項目シートに管理番号,図書名のリストがあってその範囲を参照するように設定しています(ComboBox1のListFillRange→入力項目リスト!B1:B3)。 

   B列          C列
1 658-009        植物図鑑
2 656-030        尾瀬の野草
3 830-010        食用きのこの見分け方

この管理番号は図書名と1対1で対応しているので、ComboBox1の658-009が選択されたらComboBox2の植物図鑑が表示させたり、また逆にComboBox2の植物図鑑が選択されたらComboBox1の658-009を表示させる(自動的に選択させる)方法は無いでしょうか?
教えてください。

【4477】Re:2つのコンボボックスを連動させるには...
回答  Hirofumi E-MAIL  - 03/3/22(土) 8:10 -

引用なし
パスワード
   こんな物で、上手く動くかな?
Changeイベントは連鎖で影響が出るので余り使わないのですが

Option Explicit

Private intFocus As Integer

Private Sub ComboBox1_Change()
  
  If intFocus = 1 Then
    ComboBox2.ListIndex = ComboBox1.ListIndex
  End If

End Sub

Private Sub ComboBox1_GotFocus()

  intFocus = 1
  
End Sub

Private Sub ComboBox2_Change()

  If intFocus = 2 Then
    ComboBox1.ListIndex = ComboBox2.ListIndex
  End If

End Sub

Private Sub ComboBox2_GotFocus()

  intFocus = 2
  
End Sub

【4487】Re:2つのコンボボックスを連動させるには...
お礼  はらへりおおかみ  - 03/3/22(土) 17:37 -

引用なし
パスワード
   ▼Hirofumi さん:
ありがとうございました。上手くコンボボックスの連動ができました。

>Changeイベントは連鎖で影響が出るので余り使わないのですが

とのことですが、連鎖する数が多くなったりすると影響が出たりするのでしょうか?

【4488】Re:2つのコンボボックスを連動させるには...
発言  Hirofumi E-MAIL  - 03/3/22(土) 19:14 -

引用なし
パスワード
   >>Changeイベントは連鎖で影響が出るので余り使わないのですが

余り使わないと言うより、私としては使いたくないと言う方が正しかも?

>とのことですが、連鎖する数が多くなったりすると影響が出たりするのでしょうか?

何処にどう影響するか、気をつけていなければ、いけないと言う事です
例えば、今回の物も、

Private Sub ComboBox1_Change()
  
'  If intFocus = 1 Then
    ComboBox2.ListIndex = ComboBox1.ListIndex
'  End If

End Sub

Private Sub ComboBox2_Change()

'  If intFocus = 2 Then
    ComboBox1.ListIndex = ComboBox2.ListIndex
'  End If

End Sub

として見れば解ると思います
結果としてどうなるかと言うと
コンボボックスのListから選択する場合は、別に特に表面上、問題ないのですが
ComboBox1のText部に入力した場合
ComboBox1のListIndexは当然-1に成ります
それを、ComboBox2のListIndexに入れるとComboBox2のListIndexも-1に成り
Sub ComboBox2_Changeのイベントが起こり、ComboBox1のListIndexが-1に書き替えら
れる為、入力中の文字列が消されてしまいます
詰まり、文字列の入力が不可能という事態に成ります

【4674】Re:2つのコンボボックスを連動させるには...
お礼  はらへりおおかみ  - 03/4/1(火) 23:47 -

引用なし
パスワード
   ▼Hirofumi さん:
>結果としてどうなるかと言うと
>コンボボックスのListから選択する場合は、別に特に表面上、問題ないのですが
>ComboBox1のText部に入力した場合
>ComboBox1のListIndexは当然-1に成ります
>それを、ComboBox2のListIndexに入れるとComboBox2のListIndexも-1に成り
>Sub ComboBox2_Changeのイベントが起こり、ComboBox1のListIndexが-1に書き替えら
>れる為、入力中の文字列が消されてしまいます
>詰まり、文字列の入力が不可能という事態に成ります
よく考えて使わないとダメということですね。回答ありがとうございました。

13604 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free