使用循环将多个行项目索引/匹配到一个页面上

Index/Matching Multiple Line Items on to One Page with Loop

提问人:Timbo 提问时间:10/28/2022 最后编辑:Ken WhiteTimbo 更新时间:10/29/2022 访问量:28

问:

我有一份价目表[数据],其中包含来自众多供应商的多达一千个多个项目。这些会定期从数据库中输出,以便进行排序(按供应商),以便于更新定价和其他各种任务。 从从[数据]创建的列表框中选择搜索条件。 然后,这将与[数据]中的所有订单项和创建的[目录]进行匹配,从而从每行返回多个单元格。为了正确重新进入系统,需要忽略每行上的许多单元格。

到目前为止,我已经创建了一个列表,但是,匹配从第一个供应商项目开始,一直持续到列表的末尾,就好像它与第一个初始匹配之后的项目不匹配一样。

它只需要从所选供应商中挑选数据并返回所需的结果。 原始数据不是按供应商排序的,我希望能够在不先进行数据排序的情况下做到这一点。但即使使用数据排序,它也会运行到列表的末尾。

Private Sub SupplierData_Click()
    ListBoxValue = SupplierData.Text
        Sheets("Catalogue").Cells(2, 27).Value = ListBoxValue
    Unload Me
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    Dim oCell As range
    Dim Match As range
    Dim i As Long
    Dim j As Long
    i = 2
    j = 0
    
    Set ws1 = ThisWorkbook.Sheets("Catalogue")
    Set ws2 = ThisWorkbook.Sheets("Data")
    Set Match = ws1.Cells(2, 27)
        
    Do While ws2.Cells(i, 1).Value <> ""
        Set oCell = ws2.range("A:A").Find(What:=Match)
        If Not oCell Is Nothing Then ws1.Cells(i, 2) = oCell.Offset(j, 0)
        If Not oCell Is Nothing Then ws1.Cells(i, 3) = oCell.Offset(j, 1)
        If Not oCell Is Nothing Then ws1.Cells(i, 4) = oCell.Offset(j, 9)
        i = i + 1
        j = j + 1
    Loop

End Sub
Excel VBA 循环 索引 匹配

评论


答:

0赞 Timbo 10/29/2022 #1

解决。 走了一条不同的路线。

Private Sub SupplierData_Click()
    ListBoxValue = SupplierData.Text
        Sheets("Catalogue").Cells(2, 27).Value = ListBoxValue
    Unload Me
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    Dim oCell As range
    Dim opt3 as range
    Set ws1 = ThisWorkbook.Sheets("Catalogue")
    Set ws2 = ThisWorkbook.Sheets("Data")
    Set opt3 = ws1.Cells(1, 29)
    oCell = 2
While Len(ws2.range("A" & CStr(oCell)).Value) > 0
    If ws2.Cells(oCell, 1).Value = opt3 Then
        ws1.Cells(oCell, 2).Value = ws2.Cells(oCell, 1)
        ws1.Cells(oCell, 4).Value = ws2.Cells(oCell, 2) & " " & ws2.Cells(oCell, 8) & " " & ws2.Cells(oCell, 4)
        ws1.Cells(oCell, 5).Value = ws2.Cells(oCell, 3)
        ws1.Cells(oCell, 6).Value = ws2.Cells(oCell, 10)

        oCell = oCell + 1

Wend
End Sub