Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA基于Listbox2选择填充Listbox1_Excel_Vba - Fatal编程技术网

Excel VBA基于Listbox2选择填充Listbox1

Excel VBA基于Listbox2选择填充Listbox1,excel,vba,Excel,Vba,我正试图根据第二个列表框中的选择找出填充列表框的正确代码。我会尽我所能解释我的问题。我有一个工作表,其中有两列是这样填充的 (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 Dim ws As Excel.Worksheet Dim

我正试图根据第二个列表框中的选择找出填充列表框的正确代码。我会尽我所能解释我的问题。我有一个工作表,其中有两列是这样填充的

(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
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
我希望能够用“PART NUMBER”列填充ListBox1,当我单击“PART 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

在“零件号”组合框的“更改”事件中,执行以下操作

(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
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
Dim ws As Excel.工作表
暗淡的光线和长的一样
设置ws=工作表(“表2”)
lRow=1
'在行中循环

你知道如何使用VBA吗?如果是,请说明您迄今为止尝试了什么,以及尝试失败的地方。如果您不知道如何使用VBA,我不建议您这样做。此处提供了非VBA解决方案,可使用数据功能区中的数据验证工具和名称管理器。请尝试以下解释:是的,我确实知道一些VBA。我还没有做我想做的事。我已经编辑了我的初始问题,以显示我在做什么。我就是想不出如何让他们彼此互动。马修德。。。谢谢你的帮助。我在IF语句行中遇到“类型不匹配”错误。我的零件号列表框正在加载,但当我单击该列表中的零件号时,我得到了错误。我正在使用更改事件触发您的代码。我假设行“Userform1”应该引用我的位置列表框,对吗?Thanks@user3340949那是我的错。在C和VB之间切换使我做到了这一点。那条线应该有一个&而不是一个加号。我还在上面添加了一个exit do来提高性能。是的,你关于Userform1的假设是正确的。不管你的表格叫什么,把它放在那里。你可能甚至不需要引用表格。您可以将其称为LstPartNum。我刚刚从您的代码中继承了这个列表。我还添加了一个LstLocation.ClearMatthew。非常感谢您的时间和帮助。这正是我所希望的。