引用子表单中的控件

时间:2015-07-09 15:37:26

标签: ms-access access-vba ms-access-2010

我无法准确确定下面的示例为何如此表现。

使用:

 
Debug.Print Forms!Form1![Subform1]!control1 

不起作用

Debug.Print Forms!Form1![Subform1].control1 

错误:

  

运行时错误''&n ;;   对象不支持此属性或方法


乍一看,我只是假设.control1正在访问Subform1的属性而不是控件本身,因此有理由会出现错误。

然而,在将这些推理用于示例时,这种推理似乎并不适用:

Debug.Print Forms!Form1![Subform1].Form.control1 
Debug.Print Forms!Form1!Subform1.Form.control1


结果屏幕截图:

With Square Braces

Without Square Braces

对我来说,这些示例也看起来像我正在访问.CHAT_MESSAGE_ID表单对象的Chat属性,但我没有收到任何错误消息,它们工作正常。

为什么这两个例子仍然有用Debug.Print Forms!Form1![Subform1].control1没有?

2 个答案:

答案 0 :(得分:1)

bang(!)运算符访问集合中的默认属性和对象。 显然Subform.FormSubform控件的默认属性,Controls集合是Form类的默认属性。因此,您可以使用Subform!ControlName访问子窗体上的控件。但是,如果您说Subform.ControlName,则专门尝试访问Subform控件的名为“ControlName”的属性。那个不存在。

bank(!)运算符搜索匹配的对象。点(。)运算符假定直接引用现有属性。

答案 1 :(得分:1)

在许多情况下,Access 表单对象允许您访问其控件并记录源字段,就好像它们是表单的属性一样。这意味着当您在该表单中编辑VBA代码时可以使用Intellisense,因此您可以使用Me.control1Me.control1.Value control1 的控件的值p>

该功能也是Debug.Print Forms!Form1!Subform1.Form.control1 可以工作的原因。但是Debug.Print Forms!Form1!Subform1.control1失败,因为 Subform1 是一个控件,而不是表单对象,并且它不包含名为 control1 的属性。 (这就是错误消息所抱怨的内容。)

如果您的子表单SourceObject是表或查询而不是实际表单对象,情况会变得更复杂。我自己没有完成这些变化的详细信息,但如果您真的想使用 SubformControl.Form.property 模式,我建议您查看它们。

我只是使用类似Forms!Form1!Subform1!control1的东西,这对我来说不那么容易混淆。