在Access 2007 VBA中,未保存的表单和报表是否可以键入为“AccessObject”..?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Access 2007 VBA中,未保存的表单和报表是否可以键入为“AccessObject”..?相关的知识,希望对你有一定的参考价值。

我在Access 2007 VBA中,创建代码,用于在设计视图中自动化窗体和报表上的控件的布局和格式。

为了简化我的代码,我试图将表单和报告作为一个常见的根类型引用,因此单个变量“thisDoc”可以引用它们。我以为那会是“AccessObject”,但似乎没有。我得到运行时错误#13,类型不匹配。

表单和报告是否具有共同的根类型?如果是这样,它是什么......?

类型“对象”当然是可能的,但我更喜欢在Access对象层次结构中更接近子节点的东西。这是为了避免后期绑定,并满足我的OCD,但主要是为了让IntelliSense正常工作。

这是问题所在:我的代码访问当前屏幕上的活动表单或报表,可能尚未保存。因此,它们尚未出现在AllForms或AllReports中。在动态表格/报告的情况下,他们永远不会。

以下是封装问题的示例代码:

dim app      as Access.Application
dim scr      as Access.Screen
dim thisDoc  as Access.AccessObject 'but "As Object" works ok.
set app       = Access.Application
set scr       = app.Screen
set thisDoc   = scr.ActiveReport     'or .ActiveForm       
'Runtime error #13: Type Mismatch.

如上所述,vartype“Object”有效,但正如我上面提到的,我想至少得到一个Access对象层次结构中的类型。

答案

不,ReportForm对象之间没有共同的界面(当然,除了Object,它可以用于任何对象。

AccessObject界面不像您通常使用的那样用于表单和报表。您无法通过它访问控件之类的内容。它主要用于迭代数据库对象(因为您可以使用通用接口来迭代表单,宏,模块和报告)。

如果您想要修改动态创建的表单和报表,并希望将它们存储在同一个变量中,那么您只能使用Object类型(或Variant,但这更不具体)。

以上是关于在Access 2007 VBA中,未保存的表单和报表是否可以键入为“AccessObject”..?的主要内容,如果未能解决你的问题,请参考以下文章

Access 2007 / VBA - 多个表单实例,从模块更新特定实例的控件

Access 2007:意外错误 (40230)

Access 2007 VBA:构建一个列表框,其中包含来自另一个列表框的选择选项

从 Access 中的 VBA 调用时 Outlook.exe 进程未结束

访问 2007 VBA DoCmd.Close 不起作用

通过 VBA 在 Access 2007 中运行以相同单词开头的多个查询