【发布时间】:2020-08-10 08:57:01
【问题描述】:
我有一个表格,它应该显示两个日期(开始日期和结束日期)之间不同数值的总和。为此,我认为最好的选择是使用SumIfsWorkSheetFunction。但是,在尝试对此进行编码后,该功能无法正常工作。我不确定出了什么问题。如果我在包含我的示例数据的表格的工作表上键入完全相同的公式,它会完美运行。
所以,我设计的表格如下:
将为完成(或结束)日期添加第二个标签和文本框。但是,我认为一旦我让代码在开始时使用单个日期,这样做会更好。用户将在其中插入开始日期的文本框称为tbxDate,将显示结果总和的文本框称为tbxBalance。触发SumIfs 功能的按钮称为cmdCalculate。
另外,存储数据的表(到目前为止只有一行数据用于测试目的)是这个:
表名称为Sales,工作表名称为SalesWS。我认为代码应该非常简单,除非我缺少某些东西。我所做的是:
Private Sub cmdCalculate_Click()
Set SalesRange = Worksheets("SalesWS").Range("Sales[TOTAL]")
Set DatesRange = Worksheets("SalesWS").Range("Sales[DATE]")
tbxBalance = Application.WorksheetFunction.SumIfs(SalesRange , DatesRange , ">=" & tbxDate)
End Sub
问题是条件的>= 部分失败。我只使用大于或小于条件才能得到正确的结果。例如,如果我在文本框中输入日期 09/08/2020,则余额文本框中的结果为 0,但如果我输入日期 08/08/2020 或任何在它工作之前的日期。如果日期等于输入的值,它只是忽略对值求和的条件。它仅适用于大于或小于用户在文本框中输入的日期,不包括所选日期。
我已经检查了表格中包含日期的列的格式是否正确。
【问题讨论】:
-
@RonRosenfeld 那是因为如果我这样做,代码会中断得更多。如果我将
Dim tbxDate As Date放在其他任何内容之前,无论我在文本框中输入什么日期,它都会汇总表中的所有内容。如果我在SumIfs公式的最后一个参数中执行CDate(tbxDate),则没有任何变化。它只是添加大于或小于我输入的日期,而不是相等的日期。 -
你的日期列中日期的数据类型是什么?
-
如果你得到那些有趣的结果,你的数据类型可能有问题。将所有数据类型都设置为变体类型几乎不是一个好主意。
-
存储所有日期的表格列被格式化为
dd/mm/yyyy格式的日期。如果我将文本框调暗为日期,则没有任何效果。有什么建议吗? -
确保不要将苹果与梨进行比较。您的“tbxDate”代表
tbxDate.Value,它是一个看起来像日期的字符串。如果您在 DATE 范围内有类似的字符串,则您正在执行文本比较。如果范围包含真实日期,您也需要将 tbxDate 中的字符串转换为真实日期。