制作起来应该很简单,但是不起作用。我的日期数据列表中的第6列的格式为“ mmm.yyyy”。
我总是列表中的所有行,但我只希望那些日期早于今天的行。
只有语句的一部分And ws.Cells(i, 6).Value <> vbNullString
Sub PopulateList2()
Dim rngName As Range
Dim ws As Worksheet
Dim i As Integer
Dim LastRow As Long
Set ws = E1G
AbgeListField.Clear
AbgeListField.ColumnCount = 2
LastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).row
For i = 1 To LastRow
'If statement to get Cells(i, 6).value and check it with Date(now).
If Format(Cells(i, 6), "mmm.yyyy").Value < Format(Now(), "mmm.yyyy") _
And ws.Cells(i, 6).Value <> vbNullString Then
AbgeListField.AddItem ws.Cells(i, 1).Value
AbgeListField.List(i - 1, 1) = ws.Cells(i, 2).Value
AbgeListField.List(i - 1, 2) = ws.Cells(i, 3).Value
End If
Next i
End Sub
答案 0 :(得分:1)
也许我误解了,但是这段代码应该可以正常工作:
If ws.Cells(i, 6).Value < Now() _
And ws.cells(i, 6).value <> vbNullString Then
它不能与format一起使用,因为format将值转换为字符串。然后,您将不得不使用CDate转换功能将其恢复为日期,但是当您已有日期时,它的用途是什么。
有三种返回或设置单元格值的方法,例如
让我们在2018年10月3日在“ A1”单元格中使用
Cells(“ A1”)。Value返回'3.10.2018'(可能因系统设置而异)
Cells(“ A1”)。Value2返回'43376'
Cells(“ A1”)。文本在您的示例“ 2018年10月”中返回
如果您使用“值”,则无论使用哪种格式,都将始终使用“值”,而不是“文本”。
如果您迷路了,可以随时将Now()和ws.Cells(i,6).Value转换为双精度类型,以确保对数字进行比较:
If CDbl(ws.Cells(i, 6).Value) < CDbl(Now()) _
And ws.cells(i, 6).Value <> vbNullString Then