2017-03-16 190 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