2016-09-03 7 views
0

Excel VBA:別のコンボボックスの選択に基づいてコンボボックス(cbo)を作成しようとしています。私は自分のコードを完成させる方法を理解できません。私が見つけたものはすべて近くにありますが、そこにはあまり行きません。Excel vba動的にコンボボックスを作成

最初のcbo選択はcstmr名です。これはcstmrIdとcstmrNmを使用するテーブルから移入します。名前はcboに設定されますが、cstmrIdはバインドされます。

2番目のcboはcstmrの場所です。 cstmrIdを使用して最初のcboで選択されたcstmrの場所だけにドロップします。cstmrの場所は、 "tblCstmrLoc"という名前のテーブル内の別のwkshtで見つけられます。ここで、列1はcstmrId、列2はcstmrLocテーブルはこれらの2つの列よりも大きい。

私はそれぞれwhileループとdo whileループを混乱させましたが、最初のドロップダウンで選択されたcstmrIdにループを制限する方法がありませんでした。ここ

は、私がこれまで持っているものです。

Private Sub cboCstmr_Change() 

    Dim CstmrId As Integer 
    Dim Rng As Range 

    CstmrId = Me.cboCstmr.ListIndex + 1 
    Set Rng = Range("LISA.xlsm!tblCstmrLoc") 

    Do While Rng.Value = CstmrId 
     cboCstmrLoc.AddItem ActiveCell.Offset(0, 1).Value 
     MsgBox ActiveCell.Offset(0, 1).Value 
    Loop 

End Sub 

は右方向に任意の助けを感謝しています。

+0

'tblCstmrLoc'は実際のテーブルですか?何のワークシートですか? –

+0

これは、 "Locations"と呼ばれるwkshtのテーブルという名前の範囲です。 CstmrIdは、 "Customers"というwkshtに由来し、CstmrをCstmrLocにリンクします。顧客と場所の間には1対1の関係があります。 – Trekkin

+0

最終的な作業コードは次のとおりです。 – Trekkin

答えて

1

ここ

`プライベートサブcboCstmr_Changeを(使用した最終的なコード) DIMが限り 暗いRNGとしてレンジ レンジ( "CstmrNmUsed")をカウント= cboCstmr.Text

Me.cboCstmrLoc.Clear 
With Me.cboCstmrLoc 
    For Each Rng In Range("tblCstmrLoc").Columns(1).Cells 
     If CStr(Rng.Value) = Range("CstmrIdUsed") Then 
      .AddItem Rng.Offset(0, 1).Value 
      .List(count, 1) = Rng.Offset(0, 2).Value 
      count = count + 1 
     End If 
    Next 
End With 

でありますEnd Sub`

注:計算されたCstmrIdUsed値を維持するために、このコード行をフォームのオープン、クリアなどに追加しました。

Range("CstmrIdUsed").FormulaArray = "=SUM(IF(tblCstmr[CSTMR_NM]=CstmrNmUsed,tblCstmr[CSTMR_ID]))" 

トーマスに感謝してくれてありがとう。

関連する問題