从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似乎什么都不做。如果我滚动表单并选择空白字段,则会显示值。是否有任何方法可以在屏幕上显示每个文本框的值,或者在表单加载时获取,或者最糟糕的是,当用户滚动时?
答案 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
。