在Me.Recalc中,不显示Access屏幕外值

时间:2009-09-30 04:06:23

标签: ms-access vba

从VBA我设置一系列文本框以获得DSum controlSources:

Me.Oct.ControlSource = "=DSum('GBPValue', _
                                'MF YTD Actual Income & Adret', _
                                'Month=10 AND Org_Type=[Key]')"
Me.Nov.ControlSource = "=DSum('GBPValue', _
                                'MF YTD Actual Income & Adret', _
                                'Month=11 AND Org_Type=[Key]')"

然后运行Me.Recalc以获取值设置后显示的值。这适用于表单加载时屏幕上的文本框,但对于目前不在屏幕上的相同(非常宽)表单上的文本框,Recalc似乎什么都不做。如果我滚动表单并选择空白字段,则会显示值。是否有任何方法可以在屏幕上显示每个文本框的值,或者在表单加载时获取,或者最糟糕的是,当用户滚动时?

2 个答案:

答案 0 :(得分:1)

我可以猜到为什么会发生这种情况:Recalc可能不会重新绘制当前不可见的控件。因此,即使控件的值实际上发生了变化,当滚动窗口显示它们时,它们的缓存视觉外观仍然显示为空。

以下是我建议的内容:在表单上创建一个成员函数,如下所示:

Function GetMonthValue(Month As Long) As Double
   GetMonthValue = DSum("GBPValue", "MF YTD Actual Income & Adret", _
                 "Month=" & Month & " AND Org_Type=" & [Key])
End Function

然后可以将文本框的控制源设置为“= GetMonthValue(1)”,依此类推。这意味着每个控件的源都是静态声明的,并且在表单加载时无需更改任何内容。当前记录发生变化时,该值应该跟踪,尽管我没有通过测试验证这一点。

答案 1 :(得分:0)

我不知道问题是什么,但你可以试试这个:

...
Me.Oct = DSum('GBPValue', _
                'MF YTD Actual Income & Adret', _
                'Month=10 AND Org_Type=[Key]')
Me.Nov = DSum('GBPValue', _
                'MF YTD Actual Income & Adret', _
                'Month=11 AND Org_Type=[Key]')
...

直接使用DSum设置控件的文本。

修改:您还可以在计算后尝试刷新表单,即Me.Refresh