我正在尝试计算 Sheet2 上的记录。
Dim wksdata As Worksheet
Dim xyz as String
Dim Time as String
Set wksdata = Sheets("Data")
Time = Date + TimeValue("08:00:00") 'Set Time value as todays date 8am
'set calculations worksheet cell I15 as the time value
Worksheets("Calculations").Range("I15").Value = Time
'converts time column to time format
Worksheets("Data)").Range("U:U").NumberFormat = "dd/mm/yyyy hh:mm:ss"
xyz = WorksheetFunction.CountIfs(wksdata.Range("I:I"), "xyz", _
wksdata.Range("K:K"), "C", wksdata.Range("U:U"), "<" & _
Worksheets("Calculations").Range("I15").Value)
如果我直接在工作表中应用它,它会以相同的逻辑工作。
为什么它在 VBA 中不起作用?
尝试使用不同的变量来设置日期和时间。 “Time”是在 VBA 中内置的,将返回当前时间,因此 Range("I15").Value 将设置为当前时间,而不是所需的 08:00
Dim wksdata As Worksheet
Dim xyz as String
Dim startTime as String
Set wksdata = Sheets("Data")
startTime = Date + TimeValue("08:00:00") 'Set Time value as todays date 8am
Worksheets("Calculations").Range("I15").Value = startTime 'set calculations
worksheet cell I15 as the time value
Worksheets("Data)").Range("U:U").NumberFormat = "dd/mm/yyyy hh:mm:ss"
'converts time column to time format
xyz = WorksheetFunction.CountIfs(wksdata.Range("I:I"), "xyz",
wksdata.Range("K:K"), "C", wksdata.Range("U:U"), "<" &
Worksheets("Calculations").Range("I15").Value)
日期部分需要转换为Long。完成此操作后,公式就可以正确运行。以下是如何使用类似公式完成此操作的示例:
Sub test_method()
Range("B1") = Now()
Range("B1").NumberFormat = "dd/mm/yyyy hh:mm:ss"
'Trying to calculate using a VBA date in the worksheet formula doesn't work
'This returns 0
Debug.Print WorksheetFunction.CountIfs(Range("B1:B10"), ">" & (Now() - 0.75))
'Now we change it to a long and it yields the correct answer
'returns 1
Debug.Print WorksheetFunction.CountIfs(Range("B1:B10"), ">" & CLng((Now() - 0.75)))
End Sub