我正在使用此代码填充可以正常工作的组合框。
lastrow = ws.Columns("C").Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
v = ws.Range("C" & ws.Range("start_row_pu").Row + 1 & ":" & "R" & lastrow).Value2
For i = LBound(v) To UBound(v)
v(i, 1) = v(i, 1) & ": " & Format(v(i, 6), "dd mmm yy") & " " & v(i, 5)
Next i
ReDim Preserve v(1 To UBound(v), 1 To 1)
tag_combo.List = v
我希望添加一个If语句,以便仅将第1列中值为“ Post”的单元格添加到数组中。我尝试过:
If v(i, 1) = "Post" then
v(i, 1) = v(i, 1) & ": " & Format(v(i, 6), "dd mmm yy") & " " & v(i, 5)
End if
但这会导致组合框列表仍然仅加载列C中的所有值。
答案 0 :(得分:0)
现在,您将范围加载到数组中,并且想要遍历数组以删除不需要的项目。我知道遍历数组比遍历单元格要快,但是我只是想提供一种替代方法,也应该很快。
Private Sub UserForm_Initialize()
With ThisWorkbook.Sheets("Sheet1")
With Intersect(.UsedRange, .Columns(3))
.AutoFilter 1, "Post"
For Each cl In .Offset(1).Resize(.Rows.Count - 1).SpecialCells(12)
Me.ComboBox1.AddItem cl.Value & ": " & Format(cl.Offset(0, 5), "dd mmm yy") & " " & cl.Offset(0, 4)
Next cl
.AutoFilter
End With
End With
End Sub
不幸的是,我们无法将非连续范围分配给数组或combobox.list,因此我们必须遍历可见单元格并使用.AddItem
。