我正在尝试编写一个代码,如果用户选择的项目等于J中的范围,那么它将从excel工作表中添加数据。如果J中的范围被所有数据填充,那么这将非常有效如果它们之间有空格,我如何使该行仍然一直计数到最后一个填充的单元格?我附上一张图片来说明我的意思。
我想一直计数到最后一个“金”的行数。现在,它仅计数到秒。
Private Sub cboName_Click() 'only get values that are assigned
Dim j As Integer, k As Integer, i As Integer
Me.lstProvider.Clear
i = 0
Worksheets("Biopsy Log").Select
For j = 1 To Range("J2", Range("J1").End(xlDown)).Rows.count
If Range("J2", Range("J2").End(xlDown)).Cells(j) = Me.cboName.Value Then
If Range("C2", Range("C2").End(xlDown)).Cells(j) = "Assigned" Then
With Me.lstProvider
.AddItem
For k = 0 To 5
.List(i, k) = Range("A" & j + 1).Offset(0, k)
Next
End With
i = i + 1
End If
End If
Next
End Sub
答案 0 :(得分:1)
请尝试从底部开始使用xlDown
,以获取正确范围的最后一行,而不是使用xlUp
:
Dim sht As Worksheet
Set sht = Worksheets("Biopsy Log")
For j = 1 To sht.Range("J" & sht.Rows.Count).End(xlUp).Row
If sht.Range(...)
使用显式Range
对象限定Worksheet
调用可使代码更健壮。
答案 1 :(得分:0)
使用For j = 1 To Range("J2", Range("J1").End(xlDown)).Rows.count
代替Range("J" & Rows.Count).End(xlUp).Row
(假设GOLD在J列中)。该代码与xlDown
相反。它下降到工作表的最后一行(Rows.count
),然后向上移动直到找到第一个非空白单元格。