访问VBA:更改子窗体的记录源

时间:2015-06-15 18:15:58

标签: vba ms-access access-vba

我有一个带子表单的表单,我希望填充子表单的子表单记录源根据主表单中某些组合框的输入而改变。

使用VBA,我构建了一个函数,用于生成我想用其填充子表单的SQL语句。我知道这是有效的,因为我已经用msgbox测试了它,它给了我想要的SQL语句。 sql语句使用聚合函数,因此生成的表具有与其查询的表不同的结构。

我用来更改子窗体记录源的代码是:

me![subformname subform].form.recordsource=myfunction()

这在过去对我有用,但在这里不起作用,我只是得到“#Name?”在我表单上的子表单中。

当我单独打开子窗体时,我得到“#Name?”但是当我打开Recourd Source并从记录源运行查询时,我得到一个值,所以我很困惑。

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

尝试设置两个子表单 - 每个表单对应一种所需的格式 - 当您交换基础记录集时,还可以交换或隐藏/取消隐藏相关的子表单。然后,您可以将相关控件的controlsource设置为当前记录集中实际可用的字段。

答案 1 :(得分:0)

我通过改变我正在改变的子表单的结构来使它工作,这样当我改变记录源时结构保持不变。经验教训是,您可以在VBA中更改记录源,但不能更改子表单的结构。

答案 2 :(得分:0)

发生问题是因为我在子表单记录源SELECT查询中使用了别名。当我用VBA代码中的实际数据库表名称替换别名表名称时,.recordsource = strSQL01语句起作用,并且数据出现在子窗体中。