2015-07-21 170 views
3

我想弄清楚基于第二个列表框中的选择来填充列表框的正确代码。我会尽我所能解释我的问题。我有一个工作表,有两列像这样填充。基于列表框2选择Excel VBA填充列表框1

(COLUMN A) (COLUMN B) 
PART NUMBER: LOCATION: 
PART A  LOC1,LOC7,LOC12,LOC21 
PART B  LOC2,LOC8,LOC13,LOC22 
PART C  LOC6,LOC9,LOC18,LOC20 

我希望能够填充ListBox1中的“零件号码”一栏,当我点击“A部分”我得到的只是一个物品从ListBox2(列B)位置的名单。我希望这是有道理的,有人可以帮助我。先谢谢你。

要填充列表框我:

Dim rngName As Range 
Dim ws As Worksheet 
Dim i As Integer 

Set ws = Worksheets("Sheet2") 
For i = 1 To ws.Cells(ws.Rows.Count, 1).End(xlUp).Row Step 1 
If ws.Cells(i, 1).Value <> vbNullString Then Me.LstPartNum.AddItem ws.Cells(i, 1).Value 
Next i 

来测试填充并用逗号分开:

UserForm1.LstPartNum.List = Split("LOC1,LOC7,LOC12,LOC21", ",") 
+1

你知道如何使用VBA吗?如果是,请显示您迄今为止尝试的内容,以及尝试失败的位置。如果你不知道如何使用VBA,我不建议你这样做。这里有非VBA解决方案,使用数据功能区中的数据验证工具和名称管理器。试试这里的解释:http://stackoverflow.com/a/14997530/5090027 –

+0

是的,我知道一些VBA。我还没有做我想做的事情。我编辑了我最初的问题,以表明我在做什么。我只是无法弄清楚如何让他们互相交流。 – Noob2Java

回答

2

在零件号组合框的更改事件做这样的事。

Dim ws As Excel.Worksheet 
Dim lRow As Long 

Set ws = Worksheets("Sheet2") 
lRow = 1 

'Loop through the rows 
Do While lRow <= ws.UsedRange.Rows.count 
    'Check if Column A has the value of the selected part number. 
    If ws.Range("A" & lRow).Value = LstPartNum.Text Then 
     UserForm1.LstLocation.Clear 
     'Load the locations 
     UserForm1.LstLocation.List = Split(ws.Range("B" & lRow).Value, ",") 
     Exit Do 
    End If 
lRow = lRow + 1 
Loop 

如果您UserForm1.LstPartNum.List =斯普利特()不起作用加载列表,这里是代码回路分割阵列。

Dim szLocs() As String 
Dim i as integer 

szLocs= Split(ws.Range("B" & lRow).Value, ",") 

i = 0 
'Loop though each token 
Do While i <= UBound(szPieces) 
    UserForm1.LstPartNum.Additem szPieces(i) 
i = i + 1 
Loop 
+0

MatthewD ...感谢您的帮助。 IF语句行中出现“类型不匹配”错误。我的PartNumber列表框正在加载好,但是当我点击该列表中的零件编号时,出现错误。我正在使用更改事件来触发您的代码。我假设“Userform1”行应该引用我的位置列表框,对吗?谢谢 – Noob2Java

+0

@ user3340949这是我的错。在C和VB之间切换让我做到了。这条线应该有一个&而不是一个加号。我还增加了一个退出功能来帮助提升性能。是的,你的假设oubout用户表单1是正确的。无论你的表格被称为放在那里。 – MatthewD

+0

你可能甚至不需要引用表单。您可以将probalby简称为LstPartNum.List,我只是将它从您的代码中提取出来。 – MatthewD