Excel VBA質問箱 IV

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

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


3659 / 13644 ツリー ←次へ | 前へ→

【60872】コンボボックスの相互連動 あーあ 09/3/19(木) 12:45 質問[未読]
【60874】Re:コンボボックスの相互連動 Jaka 09/3/19(木) 13:46 発言[未読]
【60875】Re:コンボボックスの相互連動 つん 09/3/19(木) 13:59 発言[未読]
【60876】Re:コンボボックスの相互連動 Jaka 09/3/19(木) 14:12 発言[未読]

【60872】コンボボックスの相互連動
質問  あーあ  - 09/3/19(木) 12:45 -

引用なし
パスワード
   元のデータに氏名1、氏名2、住所1、住所2があるとします。ユーザーフォームにてコンボボックス1とコンボボックス2を作成し、コンボボックス1に氏名1を選択すればコンボボックス2に自動的に住所1が、逆にコンボボックス2に住所2を選択すればコンボボックス1に氏名2が反映されるようにしたいのですが、どうすればよいか教えてください。

'氏名が変更されたとき
Private Sub コンボボックス1_Change()
'変更された氏名のインデックスを住所のコンボボックスに設定
Me.コンボボックス2.ListIndex = Me.コンボボックス1.ListIndex
End Sub

'住所が変更されたとき
Private Sub コンボボックス2_Change()
'変更された住所のインデックスを氏名のコンボボックスに設定
Me.コンボボックス1.ListIndex = Me.コンボボックス2.ListIndex
End Sub

'フォームの初期化
Private Sub UserForm_Initialize()
Me.コンボボックス1.AddItem ("氏名1")
Me.コンボボックス1.AddItem ("氏名2")
Me.コンボボックス2.AddItem ("住所1")
Me.コンボボックス2.AddItem ("住所2")
Me.コンボボックス1.ListIndex = 0
Me.コンボボックス2.ListIndex = 0
End Sub

上記のマクロだと動くのですが、ループしているような気がします。
矢印キーでスクロールさせた時にループさせない方法は出来ないのでしょうか?
DropButtonClickイベントだと、マウスで選んだときしか思ったように動作しないので。

フラグ使う方法やイベントでいい方法があれば教えてください。

【60874】Re:コンボボックスの相互連動
発言  Jaka  - 09/3/19(木) 13:46 -

引用なし
パスワード
   動作未確認ですが、大体こんな感じになるかと。

Dim Flg0 As Boolean
Dim Flg1 As Boolean
Dim Flg2 As Boolean

>'氏名が変更されたとき
>Private Sub コンボボックス1_Change()
>'変更された氏名のインデックスを住所のコンボボックスに設定
If Flg0 = False And Flg2 = False Then
  Flg1 = True
>Me.コンボボックス2.ListIndex = Me.コンボボックス1.ListIndex
  Flg1 = False
End If
>End Sub
>
>'住所が変更されたとき
>Private Sub コンボボックス2_Change()
>'変更された住所のインデックスを氏名のコンボボックスに設定
If Flg0 = False And Flg1 = False Then
  Flg2 = True
>Me.コンボボックス1.ListIndex = Me.コンボボックス2.ListIndex
  Flg2 = False
End IF
>End Sub
>
>'フォームの初期化
>Private Sub UserForm_Initialize()
>Me.コンボボックス1.AddItem ("氏名1")
>Me.コンボボックス1.AddItem ("氏名2")
>Me.コンボボックス2.AddItem ("住所1")
>Me.コンボボックス2.AddItem ("住所2")
Flg0 = True
>Me.コンボボックス1.ListIndex = 0
>Me.コンボボックス2.ListIndex = 0
Flg0 = False
>End Sub

【60875】Re:コンボボックスの相互連動
発言  つん  - 09/3/19(木) 13:59 -

引用なし
パスワード
   ▼Jaka さん、あーあさん、
こんにちは〜^^
横から失礼します〜

>動作未確認ですが、大体こんな感じになるかと。
>
>Dim Flg0 As Boolean
>Dim Flg1 As Boolean
>Dim Flg2 As Boolean

これ、別に3つ変数用意しなくても、
一つでOKちゃいますか?

Private blnFlag As Boolean

'==============================================
Private Sub ComboBox1_Change()
   If blnFlag = False Then
    blnFlag = True
    ComboBox2.ListIndex = ComboBox1.ListIndex
    blnFlag = False
  End If
End Sub

'==============================================
Private Sub ComboBox2_Change()
  If blnFlag = False Then
    blnFlag = True
    ComboBox1.ListIndex = ComboBox2.ListIndex
    blnFlag = False
  End If
End Sub

'==============================================
Private Sub UserForm_Initialize()

  blnFlag = True
  
  With ComboBox1
    .AddItem "名前1"
    .AddItem "名前2"
    .ListIndex = 0
    .Style = fmStyleDropDownList
  End With
  
  With ComboBox2
    .AddItem "住所1"
    .AddItem "住所2"
    .ListIndex = 0
    .Style = fmStyleDropDownList
  End With
  
  blnFlag = False

End Sub

これで動作確認したら問題なかったような気がします。
どうかな?
私の気付かない落とし穴があるんやろか?

【60876】Re:コンボボックスの相互連動
発言  Jaka  - 09/3/19(木) 14:12 -

引用なし
パスワード
   ▼つん さん:
こんにちは〜^^

>これ、別に3つ変数用意しなくても、
>一つでOKちゃいますか?
そうかもしれません。
いらん事を考えていたので、ロジックにあまり頭が回らなくて...。

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