2015-04-17 72 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 –