如何阻止循环在多列用户窗体列表框中显示相同的字符串?
How do I stop a loop from displaying the same String in a Multicolumn Userform Listbox?
如果我没有把所有的手续都弄好,我深表歉意,但这里什么也没有。
我有一个我一直在开发的用户表单,并且一直在研究如何获取列表框 (LB_JobItem) 以根据组合框 selection (CB_JobSelect) 进行填充.到目前为止,我已经获得了所有要填充的字段,但它们各自显示相同的字符串。当我 select 工作地点时,这是它输出的内容:
这恰好是与位置相关的最后一个值,(在本例中是 Belleville),在电子表格中,请参阅数据:
我想做的是在列表框中显示唯一的供应商、项目和单位编号值。似乎循环没有进入电子表格中的下一个值,而且我不知道它挂在我的代码中的什么位置。尽管我有一种感觉,它与我的 "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
问题是您首先分配所有值,然后输出相同的值,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
如果我没有把所有的手续都弄好,我深表歉意,但这里什么也没有。 我有一个我一直在开发的用户表单,并且一直在研究如何获取列表框 (LB_JobItem) 以根据组合框 selection (CB_JobSelect) 进行填充.到目前为止,我已经获得了所有要填充的字段,但它们各自显示相同的字符串。当我 select 工作地点时,这是它输出的内容:
这恰好是与位置相关的最后一个值,(在本例中是 Belleville),在电子表格中,请参阅数据:
我想做的是在列表框中显示唯一的供应商、项目和单位编号值。似乎循环没有进入电子表格中的下一个值,而且我不知道它挂在我的代码中的什么位置。尽管我有一种感觉,它与我的 "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
问题是您首先分配所有值,然后输出相同的值,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