2016-09-03 215 views
0

的Excel VBA:我試圖填充基於另一個組合框的選擇的組合框(CBO)。我無法弄清楚如何完成我的代碼。我在網上找到的所有東西都很接近,但並不完全符合要求。Excel VBA中動態填充組合框

第一CBO選擇是一個cstmr名。這從使用cstmrId和cstmrNm的表填充。該名稱在cbo中填充,但cstmrId已綁定。

第二CBO爲cstmr位置。我想向下限制下降到用於在使用cstmrId的cstmr位置第一CBO選擇的cstmr唯一位置可以在一個範圍內命名的表不同的wksht稱爲「tblCstmrLoc」,其中第1列是cstmrId和列中找到2是cstmrLoc並且表格比這兩列更大。

我已經搞砸了每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

它是名爲「位置」的wksht上的一個名爲表的範圍。 CstmrId來自名爲「Customers」的wksht並將Cstmr鏈接到CstmrLoc。所以客戶和位置之間有一對多的關係。 – Trekkin

+0

這是最後的工作代碼: – Trekkin

回答

1

這裏是在於使用

`私人小組cboCstmr_Change() 昏暗計數只要 昏暗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 

結束Sub`

注:我還添加了這行代碼到我開的,明確的,等潛艇進行維護計算CstmrIdUsed價值形態。

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

非常感謝Thomas幫助我解決這個問題。