Ms access 告诉MS Access VBA函数等待子窗体完成计算

Ms access 告诉MS Access VBA函数等待子窗体完成计算,ms-access,vba,wait,subform,Ms Access,Vba,Wait,Subform,我有一个子表单sfrmMySubForm,在页脚中包含一个名为CountRows的未绑定字段,该字段设置为=Count(*)。子窗体将显示在表视图中。我通过VBA代码动态更改对sfrmMySubForm的过滤。这个很好用 更新过滤器后,我想根据现在显示的行数更改子窗体的高度。我编写了一个函数来实现这一点,使用Me!sfrmMySubForm!CountRows以获取信息。如果我通过按钮触发函数,这很好,但是如果我在过滤器更新代码之后调用它,Me!sfrmMySubForm!CountRows返回

我有一个子表单
sfrmMySubForm
,在页脚中包含一个名为
CountRows
的未绑定字段,该字段设置为
=Count(*)
。子窗体将显示在表视图中。我通过VBA代码动态更改对
sfrmMySubForm
的过滤。这个很好用

更新过滤器后,我想根据现在显示的行数更改子窗体的高度。我编写了一个函数来实现这一点,使用
Me!sfrmMySubForm!CountRows
以获取信息。如果我通过按钮触发函数,这很好,但是如果我在过滤器更新代码之后调用它,
Me!sfrmMySubForm!CountRows
返回
0
-显然,在子窗体计算
CountRows
的新值之前,函数已被调用(我花了几个小时才找到)

我的问题: 如何让函数等待子窗体完成计算是否有其他方法可以获取过滤器更新后子窗体中显示的行数-另一种方法不会导致相同的问题


我已经想过了,只要在<代码>我之前循环!sfrmMySubForm!CountRows>0但如果确实没有要显示的数据,这将不起作用…

因为您的表单基于记录集(和少量记录),您可以使用记录集克隆,movelast,然后将记录计数放入CountRows。i、 e.Set rsC=Me.RecordsetClone:rsC.MoveLast:CountRows=rsC.RecordCount:Set rsC=Nothing@Wayne邓恩的建议对我很有用。对于后续人员:我需要引用Microsoft DAO对象库(菜单工具-引用),并将
Dim rsC声明为DAO.Recordset
。子窗体的语法是
Me!sfrmMySubForm.Form.RecordsetClone
或(通过变量提供子窗体控件的名称)
Me(strHoldingSubformControlName).Form.RecordsetClone