2015-04-17 112 views
0

我有一個Access VBA項目,我正在開發並涉及循環。我有三個字段的基金號碼,生效日期和總金額。我正在嘗試創建一個VBA代碼,該代碼將通過賬戶ID進行循環,並總結過去5天(生效日期)基於基金活動的總金額。基本上,我在桌子上的輸入看起來像這樣。訪問VBA項目..創建循環以通過記錄集

Fund: Effective Date, Total Amount 
586  01/02/2015  -454 
586  01/03/2015  -454 
586  01/04/2015  -454 
586  01/05/2015  -454 
586  01/06/2015 -854 
586  01/07/2015  -954 
586  01/08/2015  -254 
586  01/09/2015 -154 
586  01/10/2015 -654 
586  01/13/2015 -354 
486 01/02/2015 -954 
486 01/03/2015 -954 
486 01/05/2015 -954 
486 01/07/2015 -954 
486 01/09/2015 -954 
486 01/010/2015 -954 

該VBA將識別資金編號。將查看日期並使用生效日期在過去五天內總計資金總流出量。然後循環將返回到第二個日期,併爲該基金添加接下來的五天總流出量,一旦循環完成,第5天將移動到下一個日期等。一旦通過該基金#完成循環,它將移動下一基金#,做提到基金同樣的事情上面

我們的目標是最終輸出插入到另一個表,將是這個樣子

Id Date , ID Amount1, ID Amount1, ID Amount1, ID Amount1, Largest Redemption week date 
Fund #  Id Date , 01/02- 1/07 01/03- 1/08 01/04- 1/09 01/05- 1/10, 
Etc Largest Redemption 
Date Largest Redemtption Week Amount 
44  -20788 -5788 -10500 5885 12/20/2014 -45855 
88  -10788 -2788 -8500 3885 06/30/2014 -50000 
60  -13788 -2788 -2500 1885 06/30/2014 -25000 

     So the final output will be inserted into another table and will look something like this      

這是我到目前爲止所。 。我需要創建一個Access vba代碼,所以會給我上面的輸出。感謝您幫助

Option Compare Database 

功能OpenRecordset()

昏暗dbsArchive數據庫 昏暗RS作爲DAO.Recordset 昏暗RS2作爲DAO.Recordset 昏暗我爲雙 昏暗的X爲雙 昏暗STRSQL作爲字符串 昏暗strFund作爲字符串 昏暗strCriteria作爲字符串 昏暗AddFundCriteria作爲雙人 昏暗FirstMark作爲變 昏暗IDFund作爲雙人 昏暗IDDate甲的雙重

集dbsArchive = CurrentDb 集RS = dbsArchive.OpenRecordset( 「2014」)

對於i = 0到rs.RecordCount - 1 strFund = rs.Fields( 「Link_Fund」)

StrSQL = "SELECT [USysD07366-2014].LINK_FUND, [USysD07366-2014].SUPER_SHEET_DATE," & _ 
      "Sum([USysD07366-2014]![REDEMPT]+[USysD07366-2014]![EXCHANGE OUT]) AS RedemptionTotal " & _ 
      "FROM [USysD07366-2014] " & _ 
      "GROUP BY [USysD07366-2014].LINK_FUND, [USysD07366-2014].SUPER_SHEET_DATE " & _ 
      "HAVING ((([USysD07366-2014].LINK_FUND) = " & strFund & ")) " & _ 
      "ORDER BY [USysD07366-2014].SUPER_SHEET_DATE; " 

      Set rs2 = dbsArchive.OpenRecordset(StrSQL, dbOpenSnapshot) 

對於x = 0到rs2.RecordCount! - 1

'strCriteria = 「鏈接基金=」 & rstCategories [鏈接基金]

  Debug.Print rs2.Fields("Link_Fund") 
      Debug.Print rs2.Fields("SUPER_SHEET_DATE") 
      Debug.Print rs2.Fields("RedemptionTotal") 

      rs2.MoveNext 

       Next x 

       rs.MoveNext 

       Next i 

      rs.Close 
      rs2.Close 
      Set rs = Nothing 
      Set rs2 = Nothing 
      dbsArchive.Close 

的ErrorHandler: MSGBOX 「錯誤#:」 &的Err.Number & vbCrLf & vbCrLf & Err.Description

 End Function  
+0

你的問題是什麼?你試過什麼了? – Fjodr

回答

1

我沒有足夠的聲譽添加評論,所以我要問這裏:

您可能想先清除很多事情。當你說「過去五天」時,你的意思是在過去5天內,還是在過去的五個記錄中?如果跳過某個日期,您希望如何處理它?

486 2015年1月2日-954
486 2015年1月3日-954
486 2015年1月5日-954
486 2015年1月7日-954
486 2015年1月9日-954

如果我們正在分析2015年9月1日,它是否應該對所有這些記錄進行求和,或僅計算日期> 01/04/2015?對於數據少於5天的日期(即01/02/2015),情況如何?它是否應該總結所有可用的數據,或者不對該日期進行任何分析?

我在工作我現在和它一直以來我用VBA,所以我不能寫出來的實際代碼語法一段時間,但我的邏輯是這樣的:

var j = 2 # used for tracking row in solution sheet 
var k = 0 # used for tracking column in solution sheet 
var prevFund = Cells(2,1).Value 
For each Row: 
    var fundID = Cells(ActiveCell.Row, 1).Value 
    k = k + 1 
    if (fundID <> prevFund) 
    j = j + 1 
    k = 0 
    end if 
    var currentDate = Cells(ActiveCell.Row, 2).Value 
    var minDate = {currentDate - 5} # not sure of the correct function for this 
    var sum = Cells(ActiveCell.Row, 3).Value 
    for (int i =0; i < 5; i++) 
    var checkDate = Cells(ActiveCell.Row + i, 2).Value 
    if (checkDate > minDate) 
     sum = sum + Cells(ActiveCell.Row + i, 3).Value 
    else 
     break 
    end if 
    end for 
    Sheets("Sheet2").Cells(j,1 + k).Value = sum 
end for 

這將只是照顧總結幾周,正如我所說的語法可能不是全部正確。你仍然需要處理標題並獲得最多周。所有數據的週數是否一致?或者它們可能會因資金而有所不同?如果您無法弄清楚,我會盡量更新,但如果您自己做,請發佈。

+0

謝謝你回答我的問題。當我說過去五天時,是的,我的意思是在過去的五天內,而不是最後五天的記錄。基金編號必須按升序排列(生效日期)以獲取最近的日期。然後,我會查看基金#並在過去5天內添加所有贖回金額。然後下一個迭代將是第一個日期的第二個日期,在過去5天內添加贖回金額。一旦所有的迭代都在該基金#內完成,那麼我們轉移到下一個基金#等。 –

+0

決賽桌看起來像這樣。 –

+0

基金的決賽桌看起來像這樣的事情 基金#\t 01/02- 01/07 \t 01/03- 01/08 \t 01/03-01/08 \t 01/04- 01/09 01/05 \t - 01/09 \t最大贖回本週開始\t最大贖回量周44 \t -11000 \t -45551 \t -8222 \t -8766 \t -5662 \t 2014年1月3日\t -11000 -13000 \t -25551 \t - 32222 \t -5766 \t -5662 \t 01/06/2014 \t -32222 –