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

问题描述 投票:0回答:1

我在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对象层次结构中的类型。

access-vba
1个回答
1
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.