Ms access 为什么点击文本框上的报告会破坏结果?

Ms access 为什么点击文本框上的报告会破坏结果?,ms-access,report,vba,Ms Access,Report,Vba,谁能帮忙,我不知道发生了什么事 对于如下所示的表: part value BAC 102 BS1 275 MAV 425 BAC 519 BSF 653 BAC 1072 结果将是: 部分BAC part value difference BAC 102 102 BAC 519 417 BAC 1072 553 除了值是有序的之外,没有任何关系 使用了@Tom

谁能帮忙,我不知道发生了什么事

对于如下所示的表:

part  value   
BAC    102  
BS1    275  
MAV    425  
BAC    519  
BSF    653  
BAC   1072
结果将是:
部分BAC

part  value  difference   
BAC    102       102  
BAC    519       417  
BAC   1072       553 
除了值是有序的之外,没有任何关系

使用了@Tom Collins的修改函数:

Function GetDiff(CurrPart As String, CurrValue As Long) As Long  
Static LastPart As String  
Static LastValue As Long  
   If CurrPart <> LastPart Then  
      LastValue = 0  
      LastPart = CurrPart  
   End If  
   If LastValue = CurrValue Then  
   GetDiff = CurrValue  
   Else  
   GetDiff = CurrValue - LastValue  
   LastValue = CurrValue  
   End If  
End Function  
函数GetDiff(CurrPart为字符串,CurrValue为长)为长 作为字符串的静态LastPart 静态LastValue为Long 如果是最后一部分,那么 LastValue=0 最后部分=当前部分 如果结束 如果LastValue=CurrValue,则 GetDiff=CurrValue 其他的 GetDiff=CurrValue-LastValue LastValue=CurrValue 如果结束 端函数 结果表明,该函数工作正常,但当结果放在报表中时,会发生一件奇怪的事情,查询的第一个值出现错误,当单击它时,结果显示正确。另一件奇怪的事情是,如果我想要字段的平均值显示错误的值,它会显示正确的平均值,如果我点击错误的值,它会变好,平均值保持不变


为什么会发生这种情况,以及如何解决这种情况?

根据我的评论,这并不像我说的那样是一个排名查询,但请尝试一下这个查询:

SELECT part, value, difference
FROM
(SELECT A.part, A.value, (SELECT Max(B.value) FROM TableName AS B WHERE B.part = A.part AND B.value < A.value) AS offset, IIf([offset] & ""="",[value],[value]-[offset]) AS difference
FROM TableName AS A
WHERE (((A.part)="BAC"))) AS B;

使用这样的查询而不是动态函数应该确保您的报表值不会更改。

您说它在报表中,然后您提到单击它。您实际上是在输出到报表还是表单?@用户报表可在报表视图中单击。我的报告中也发生过类似的怪事。有时我必须滚动查看结果,有时打印时无法显示内容(即使它们的可见性和仅打印属性没有被破坏)。这一直是Access的一个缺点,Excel更有用。必须使用自定义函数变通方法是很尴尬的,因为当您在报表上激活一行时,它将重新运行该函数,因此,结果在加载和单击时会发生变化。有可能编写一个排名查询,该查询应能提供更稳定的输出。@CatalinFRANCU我现在编辑了我的答案,以根据您的问题示例给出结果,希望对您有所帮助。
part    value    difference
BAC     102      102
BAC     519      417
BAC     1072     553