Vba 根据不同日期的评级将缺少的评级分配给某个日期

Vba 根据不同日期的评级将缺少的评级分配给某个日期,vba,loops,ms-access,Vba,Loops,Ms Access,我有一份在某个日期应用的公司CoID评级列表 评级日期是零星的,我希望通过从日期列表中将给定的评级指定给特定日期来填补空白 如果评级在给定评级日期更改,则新评级将在更改后的日期结转。 我的代码继承了最早的评级,如果评级在某个日期发生更改,则不会更改 历史上的公共功能 Dim数据库作为DAO.Database 设置dbs=CurrentDb Dim dtDate作为日期的快照日期 Dim sqlAppend作为字符串 Dim SqlQueryLasting作为字符串 将qdf设置为DAO.Quer

我有一份在某个日期应用的公司CoID评级列表

评级日期是零星的,我希望通过从日期列表中将给定的评级指定给特定日期来填补空白

如果评级在给定评级日期更改,则新评级将在更改后的日期结转。 我的代码继承了最早的评级,如果评级在某个日期发生更改,则不会更改

历史上的公共功能 Dim数据库作为DAO.Database 设置dbs=CurrentDb Dim dtDate作为日期的快照日期 Dim sqlAppend作为字符串 Dim SqlQueryLasting作为字符串 将qdf设置为DAO.QueryDef 作为DAO.Recordset的Dim rs1 Set rs1=dbs.OpenRecordsetDATES'检查此项以确保它导入表值 DoCmd.SetWarnings错误 rs1.1首先 而不是rs1.EOF '获取要用作参数的日期值 dtDate=rs1.Fields1.Value'获取要查找的日期值 '使用date参数为给定日期的最后一次评级运行SQL,并将查询结果附加到表中 DoCmd.RunSQL插入tblCoDtRtgs ISIN、CoID、SnapDate、Rating、RatingDate选择RatingsBackDated.ISIN、RatingsBackDated.CoID和dtDate&,LastRatingsBackDated.Rating为LastOfRating,LastRatingsBackDated.Date为LastOfDate&_ 从评级备份&_
其中RatingsBackDated.Date考虑纯SQL而不进行循环,首先使用交叉连接填充表中ISIN、CoID、SnapDate、Rating、RatingDate的所有组合,然后使用嵌套域聚合:

DMax按CoId查找相对于SnapDate的最新分级日期 DLookUp通过CoId检索步骤1日期的具体评级 这两个查询都可以通过Access GUI Query Design>在外部处理!如下图所示,在VBA内部运行

SQL

使用逗号分隔表的交叉联接追加查询

插入tblCoDtRtgs ISIN、CoID、SnapDate、Rating、RatingDate 选择r.ISIN、r.CoID、d[日期]、r.评级、r[日期] 从选择ISIN,CoID,评级,[日期],从评级备份r, 日期d; 使用要更新的域聚合更新查询

更新tblCoDtRtgs r 设置r.额定值=DLookUpRating,TBLCODTRTS, 额定日期=&NZDMaxRatingDate,待定日期, [日期]<&r.日期& 和CoId=&r.CoId, CDate'1900-01-01'和 和CoId=&r.CoId; VBA

。。如果评级在某个日期更改,则不会更改

您可能需要对日期值的表达式进行正确的格式设置,并且您可能希望使用Max,而不是Last:

将DoCmd.RunSQL插入tblCoDtRtgs ISIN、CoID、SnapDate、Rating、RatingDate和_ 选择RatingsBackDated.ISIN、RatingsBackDated.CoID和FormatdDate,yyyy\/mm\/dd&,MaxRatingsBackDated.Rating为LastOfRating,MaxRatingsBackDated.Date为LastOfDate&_ 从评级备份&_
其中RatingsBackDated.Date通过更改以下内容解决了问题: LastRatingsBackDated.评级为LastOfRating,LastRatingsBackDated.日期为LastOfDate&_

致: MinRatingsBackDated.评级为MinOfRating,MaxRatingsBackDated.日期为MaxOfDate&_


感谢大家的帮助。

编辑问题以显示示例数据和所需结果-作为文本表,而不是图像。如果不定义排序顺序,则“先聚合函数”和“后聚合函数”是不可靠的。复习日期和名字是保留字,不应该用保留字作为任何东西的名字。非常感谢你回复我,我明天才有机会尝试,但我会让你知道它是怎么回事!append查询表示select语句包含拼写错误或缺少的保留字或参数名称,或者标点符号不正确,update查询表示查询表达式中缺少语法错误运算符,有什么想法吗?再次感谢。我编辑了语法问题,现在在Access中进行了测试,我颠倒了DMax之前的逻辑,翻转了不带等号的不等号并添加了NZ。感谢Gustav,这不幸导致了相同的结果,它返回了带有新日期的数据,但也只返回了最旧的评级,当它改变时不更新它。
' WITH WARNINGS (NO NEED TO CLOSE ACTION QUERIES)
DoCmd.OpenQuery myAppendQuery
DoCmd.OpenQuery myUpdateQuery


' WITHOUT WARNINGS
CurrentDb.Execute myAppendQuery
CurrentDb.Execute myUpdateQuery