动态填充组合框

时间:2016-09-03 22:47:02

标签: excel vba combobox

我试图根据另一个组合框的选择来填充组合框(cbo)。

第一个cbo选择是客户名称。这将从使用cstmrId和cstmrNm的表中填充。该名称填充在cbo中,但cstmrId已绑定。

第二个cbo用于客户位置。我想使用cstmrd将下拉限制为在第一个cbo中选择的客户的位置,cstmr位置可以在名为" tblCstmrLoc"的名为table的范围内的不同工作表上找到。其中第1列是cstmrId,第2列是cstmrLoc,表格大于这两列。

我已经与For Each和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

1 个答案:

答案 0 :(得分:1)

以下是使用的最终代码

Private Sub cboCstmr_Change()
    Dim count As Long
    Dim Rng As Range
    Range("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

注意:我还将这行代码添加到表单的open,clear等等中,以保持计算出的CstmrIdUsed值。

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

非常感谢托马斯帮助我完成这项工作。