我使用了两个列表框来过滤记录,但我很难弄清楚如何只返回过滤后的记录。我可以看到我的过滤正在电子表格上工作。LastRow返回整个数据库;表单会填充整个数据库中的文本框。如果列表框中有一个选择,则我只想要经过筛选的记录。
Private Sub FillTextBoxes()
'Fill the textbox from the column specified by the Tag property
Dim Ctl As Control
If lstFilter.ListCount > 0 Then
Me.RowNo = 2
End If
For Each Ctl In Me.Controls
If Ctl.Tag <> "" _
And Ctl.Tag <> "O" _
And Ctl.Tag <> "P" _
And Ctl.Tag <> "Q" Then
Ctl.Value = Sheet1.Cells(RowNo.Value, Ctl.Tag).Value
End If
Next
End Sub
您可以将可见单元格读取到数组中,并使用该数组填充控件。
Sub test()
Dim vaValues As Variant
vaValues = Sheet1.UsedRange.Offset(1).SpecialCells(xlCellTypeVisible).Value
If True Then 'ctl.tag <> "" etc.
ctl.Value = vaValues(1, 1)
End If
End Sub
我使用的UsedRange减去了标头,但您可能可以更精确地定义您的范围。您需要更改标记(数组不使用列字母(或将其转换为列编号。您可以使用Asc((函数来完成此操作。
asc("C") - asc("A") + 1
返回3。