【问题标题】:How do I stop a loop from displaying the same String in a Multicolumn Userform Listbox?如何阻止循环在多列用户表单列表框中显示相同的字符串?
【发布时间】:2018-08-06 19:29:56
【问题描述】:

如果我没有正确处理所有手续,我深表歉意,但这里什么都没有。 我有一个我一直在开发的用户表单,并且一直停留在如何根据组合框选择 (CB_JobSelect) 来填充列表框 (LB_JobItem)。到目前为止,我已经填充了所有字段,但它们各自显示相同的字符串。当我选择工作地点时,结果如下:

ListBox Output Image

这恰好是电子表格中与位置相关的最后一个值(在本例中为 Belleville),请参阅数据:

Data From Spread Sheet Image

我要做的是在列表框中显示唯一的供应商、项目和单位编号值。似乎循环没有进入电子表格中的下一个值,我不知道它挂在我的代码中的什么位置。虽然我有一种感觉,它与我的“lastrow”声明有关。最后附上SUB的代码:

    Private Sub CB_JobSelect_Change()

    Me.LB_JobItem.Clear


    Dim Vendor As String
    Dim Item As String
    Dim UnitNumber As String
    Dim CountJob As Integer
    Dim j As Integer
    Dim i As Integer
    Dim lastrow As Long


   Set ws = Sheets("PO_U_R")

   With Application.WorksheetFunction
   CountJob = .CountIf(ws.Range("G:G"), Me.CB_JobSelect.Value)
   End With

   lastrow = Sheets("PO_U_R").Range("A" & Rows.Count).End(xlUp).Row




   With Me.LB_JobItem



   For i = 1 To lastrow
      If ws.Cells(i, 7).Value = Me.CB_JobSelect.Value Then
      Vendor = ws.Cells(i, 5)
      End If
   Next i

   For i = 1 To lastrow
      If ws.Cells(i, 7).Value = Me.CB_JobSelect.Value Then
      Item = ws.Cells(i, 4)
      End If
  Next i

  For i = 1 To lastrow
      If ws.Cells(i, 7).Value = Me.CB_JobSelect.Value Then
      UnitNumber = ws.Cells(i, 2)
      End If
  Next i

  For j = 1 To CountJob

  .AddItem
  .List(j - 1, 0) = Vendor
  .List(j - 1, 1) = Item
  .List(j - 1, 2) = UnitNumber


  Next j
 End With

 End Sub

【问题讨论】:

  • VendorItemUnitNumber 是字符串,在循环结束时,它们只分配了最后一个值。尝试使用数组。
  • ^ 他所说的:每次循环迭代都在覆盖上一次迭代的赋值。

标签: vba excel userform listbox-control


【解决方案1】:

问题是您首先分配所有值,然后输出相同的值,N (CountJob) 次。

你需要在找到它们时输出它们,或者使用数组。

For i = 1 To lastrow
    If ws.Cells(i, 7).Value = Me.CB_JobSelect.Value Then
        .AddItem
        .List(.ListCount - 1, 0) = ws.Cells(i, 5)
        .List(.ListCount - 1, 1) = ws.Cells(i, 4)
        .List(.ListCount - 1, 2) = ws.Cells(i, 2)
    End If
Next i

【讨论】:

  • 这很好用,我知道你们都在说什么关于数组以及我是如何覆盖值的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多