Application.Worksheetfunction.Median返回错误“对象不支持属性或方法”

时间:2019-07-09 11:52:53

标签: excel vba

我有一段代码,其中我使用一个时间和日期并将日期和时间分成两个不同的列,然后根据结果是否介于两个之间来分配“ A”或“ B”的值时间与否。当前,它填充两列,但在cel.Offset(0,3).Value = Application.WorksheetFunction.IF(cel.Offset(0,2).Value =(Application.WorksheetFunction.Median(“ 19:00:00“,” 06:30:00“,cel.Offset(0,2).Value)),” A“,” B“)部分。

error: Not sure how to handle insert method's return type.

如何使此返回正确的工作班次“ A”或“ B”?

1 个答案:

答案 0 :(得分:0)

两件事:

(1)格式化单元格不会更改其值,只会更改数据的显示方式。因此,单元格.offset(0, 1).offset(0, 1)将包含相同的值。如果只想检查一个单元格的时间部分,则必须提取它。

在VBA中,您可以使用函数TimeValueTimeSerial进行此操作,也可以进行数学运算:日期在内部存储为数字,整数部分表示日期,小数点时间。以下所有功能都可以使用:

Dim t as Date   ' Note that there is no Time datatype in VBA
' Get the time part of a date
t = TimeValue(.offset(0, 2))
' Get the time by extracting hour, minute and second
t = TimeSerial(hour(.offset(0, 2)), minute(.offset(0, 2)), second(.offset(0, 2)), 0)
' Get the time by subtracting the `Date`-part
t = .offset(0, 2) - int(.offset(0, 2))

(2)我认为您的问题来自将某些 WorksheetFunctions 粘合在一起。但是当您使用VBA时,无需仅使用WorksheetFunction来检查一个值是否在其他两个值之间。只需使用if语句:

Dim t As Date   ' There is no Time datatype in VBA
t = TimeValue(cel.Offset(0, 2))
If t >= TimeValue("06:30:00") And t <= TimeValue("19:00:00") Then
    cel.Offset(0, 3) = "A"
Else
    cel.Offset(0, 3) = "B"
End If

或者,如果您愿意

cel.Offset(0, 3) = IIf(t >= TimeValue("06:30:00") And t <= TimeValue("19:00:00"), "A", "B")