我无法准确确定下面的示例为何如此表现。
使用:
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
结果屏幕截图:
对我来说,这些示例也看起来像我正在访问.CHAT_MESSAGE_ID
表单对象的Chat
属性,但我没有收到任何错误消息,它们工作正常。
为什么这两个例子仍然有用Debug.Print Forms!Form1![Subform1].control1
没有?
答案 0 :(得分:1)
bang(!)运算符访问集合中的默认属性和对象。
显然Subform.Form
是Subform
控件的默认属性,Controls
集合是Form
类的默认属性。因此,您可以使用Subform!ControlName
访问子窗体上的控件。但是,如果您说Subform.ControlName
,则专门尝试访问Subform
控件的名为“ControlName”的属性。那个不存在。
bank(!)运算符搜索匹配的对象。点(。)运算符假定直接引用现有属性。
答案 1 :(得分:1)
在许多情况下,Access 表单对象允许您访问其控件并记录源字段,就好像它们是表单的属性一样。这意味着当您在该表单中编辑VBA代码时可以使用Intellisense,因此您可以使用Me.control1
或Me.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
的东西,这对我来说不那么容易混淆。