列表框根据选择

时间:2016-08-26 16:24:25

标签: excel vba select listbox vlookup

我对VBA还不熟悉,但我在工作表上有两个activex列表框。在一个列表框中,我有销售员名称(称为lstNames),另一个列表框具有位置(lstSite)。我想要实现的目标如下:

  1. 从lstNames
  2. 中选择名称
  3. 从lstNames中选择会生成lstSite,其中包含与该名称相关联的几个位置的列表。
  4. 例如,如果我从lstNames列表框中选择Bob,那么lstSites列表框将填充Bob的所有站点,如NY,CO,CA,PA。如果我从lstNames中选择Susan,那么lstSites将清除Bob的并添加Susan的TX,WA,OR等网站。

    lstNames和lstSite都来自同一个格式化的工作表:

     Column 1: Names
     Column 2: Site
    

    我一直在尝试使用Vlookup将项目添加到列表框中,但它无效。我知道我可以做一个select case语句并手动添加站点,但我想编写一个能够自动运行它们的好代码。

    Select Case lstNames.Value
        Case "Bob"
        lstSites.AddItem WorksheetFunction.VLookup(lstDM.Text, wkbhcsfdata.Worksheets("Names+Sites").Range("Sites"), 1, False)
    End Select
    

1 个答案:

答案 0 :(得分:0)

尝试这是否有助于获得所需的范围地址。为此,我使用了人员的命名范围和地点的另一个范围。变量strPerson可以用单元格值替换。

Dim ws As Worksheet
Set ws = Worksheets("sheet2")

Dim rngPerson, rngLoc As Range
Set rngPerson = ws.Range("Person")
Set rngLoc = ws.Range("Location")

Dim iMatch, iCount As Integer
Dim strPerson As String
strPerson = "Bob"

iMatch = WorksheetFunction.Match(strPerson, rngPerson, 0)
iCount = WorksheetFunction.CountIf(rngPerson, strPerson)

Dim rngList As Range
Set rngList = ws.Range(rngLoc.Rows(iMatch), rngLoc.Rows(iMatch + iCount - 1))

一旦获得了rngList的动态范围,就可以使用以下内容循环rngList:

For Each rw in rngList.rows
    [Your code to insert list items]
Next

所有这些都需要在ActiveX事件中。

编辑:将.Cells更改为.Rows