【问题标题】:In Access VBA, calculate a total from an array for a variable group在 Access VBA 中,从数组中计算变量组的总数
【发布时间】:2020-07-05 21:40:21
【问题描述】:

我有一个从动态查询创建的数组。对于一个范围内的每个项目和日期,我得到几个值。这都很好。但我需要能够计算每个组(而不是每一行)的总数,并将该总数用作以下日期范围 29 周的起始值。

在 VBA 中,我对每一行数据都有一个结束总计。然后我可以在以下日期范围内使用该总数。

我的代码的问题是每行的最终总数,而不是每个组。

使用查询(我将其用作报告的数据源),我可以使用表达式获得正确的结束总计。

查询的问题是起始值不可用。

    If cRequired < Week1 Then

    recOut.AddNew
    recOut.Fields("ItemNumber") = cItem
    recOut.Fields("tB") = cOnHand
    recOut.Fields("tPO") = cPO
    recOut.Fields("tBC") = cBC
    recOut.Fields("tSO") = CSO
    recOut.Fields("tPD") = cPD
    recOut.Fields("tIN") = cIN
    recOut.Fields("tJT") = cJT
    recOut.Fields("tWO") = cWO
    recOut.Fields("tE") = cOnHand + cPO + cBC + CSO + cPD + cIN + cJT + cWO
    recOut.Fields("RequiredDate") = cRequired
    recOut.Fields("GroupDate") = Week1
    recOut.Update

    tEPast = cOnHand + cPO + cBC + CSO + cPD + cIN + cJT + cWO

   End If

以下数据可通过查询获得。 Ending Total 是查询中的计算表达式并且是正确的。起始值由代码写入表中。这是不正确的。

[tB]+[SumOftPO]+[SumOftBC]+[SumOftSO]+[SumOftPD]+[SumOftIN]+[SumOftJT]+[SumOftWO]

009 1623.39 0   -106.404    0   0   0   0   0   2/19/2017   1516.87
009 1572.39 0   -390.477    0   0   0   0   0   2/26/2017   1182.14
009 1522.39 0   -414.684    0   0   0   0   0   3/5/2017    1107.07

对于第一行,代码获取了 4 次 cOnHand 的值,因为有 4 个原始日期(如下)。 tE 的计算针对相同的值 cOnHand 运行 4 次,每行一次。所以,下一个桶的起始值是错误的。

009  1623.39    0   -9.724  0   0   0   0   0   1613.667    2/12/2017
009  1623.39    0   -44.88  0   0   0   0   0   1578.511    2/13/2017
009  1623.39    0   -1.4    0   0   0   0   0   1621.991    2/15/2017
009  1623.39    0   -50.4   0   0   0   0   0   1572.991    2/17/2017

不太确定采用什么方法或如何获得正确的总数,无论是通过代码(正确的结束总数)还是通过查询(正确的开始值)。

我想看什么……

009 1623.91 0   -106.40     0   0   0   0   0   2/19/2017   1516.87
009 1516.87 0   -390.47     0   0   0   0   0   2/26/2017   1126.39
009 1126.39 0   -414.68     0   0   0   0   0   3/5/2017     711.71

【问题讨论】:

  • 我认为没有为任何人提供足够的信息来确定您的问题。我有一种明显的感觉,就是你的一些变量没有设置好。
  • 谢谢道格。感谢您仔细观察。正在设置变量。我发布的数据集来自工作表更新。我有一个解决方案。不是最好的,但工作。我已经更新了我的帖子。

标签: sql vba ms-access


【解决方案1】:

设法为此找到一个可行的解决方案。因为我在查询中计算了正确的值,所以我将它读回一个变量并用它来设置下一个起始值。使用以下 DLookup 而不是尝试直接处理计算。

代替:

 tEPast = cOnHand + cPO + cBC + CSO + cPD + cIN + cJT + cWO

改为:

Dim tryme As Double
        tryme = DLookup("teMe", "qBuckets", "GroupDate = Week1")
        tE0 = tryme

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-05
    • 2020-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多