2017-03-16 186 views
0

我有一个从动态查询创建的数组。对于范围中的每个项目和日期,我会得到多个值。这很好。但我需要能够计算每个组(不是每行)的总数,并将该总数用作下列日期范围的开始值,为期29周。在Access VBA中,根据变量组的数组计算总数

在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 

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

[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 

对于第一行,该代码将获取cOnHand 4倍的值,因为有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 
+0

我不认为有规定,任何人足够的信息,以便能够找出具体的问题。我有不同的感觉,你的一些变量没有被设置。 –

+0

谢谢道格。感谢您近距离观察。变量正在设置。我发布的数据集来自工作表更新。我有一个解决方案。不是最好的,但工作。我更新了我的帖子。 – Terri

回答

0

设法获得这个工作解决方案。由于我在查询中计算了正确的值,因此我将它读回到一个变量中,并用它来设置下一个起始值。使用下面的DLookup而不是直接处理计算。

相反的:

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

更改为:

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