我对VBA还不熟悉,但我在工作表上有两个activex列表框。在一个列表框中,我有销售员名称(称为lstNames),另一个列表框具有位置(lstSite)。我想要实现的目标如下:
例如,如果我从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
答案 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