在子窗体中引用控件
Posted
技术标签:
【中文标题】在子窗体中引用控件【英文标题】:Referencing Controls in Subforms 【发布时间】:2015-07-09 15:37:26 【问题描述】:我无法准确确定以下示例的行为方式为何。
作品:
Debug.Print Forms!Form1![Subform1]!control1
不起作用:
Debug.Print Forms!Form1![Subform1].control1
有错误:
运行时错误“438”: 对象不支持该属性或方法
乍一看,我只是假设.control1
正在访问Subform1
的属性而不是控件本身,所以为什么会出现错误是有道理的。
然而,在将这些用于示例时,这种推理似乎并不适用:
Debug.Print Forms!Form1![Subform1].Form.control1
Debug.Print Forms!Form1!Subform1.Form.control1
结果截图:
对我来说,这些示例看起来就像我正在访问 Chat
的表单对象的 .CHAT_MESSAGE_ID
属性,但我没有收到错误消息并且它们工作正常。
为什么这两个例子有效,而 Debug.Print Forms!Form1![Subform1].control1
却无效?
【问题讨论】:
看到这个:***.com/questions/2923957/… 【参考方案1】:在许多情况下,Access 表单对象 允许您访问其控件并记录源字段,就好像它们是表单的属性。这意味着当您在该表单中编辑 VBA 代码时可以使用 Intellisense,因此您可以使用 Me.control1
或 Me.control1.Value
该功能也是Debug.Print Forms!Form1!Subform1.Form.control1
可以工作的原因。但是Debug.Print Forms!Form1!Subform1.control1
失败了,因为Subform1 是一个控件,而不是表单对象,并且它不包含名为control1 的属性。 (这就是错误消息所抱怨的。)
如果您的子表单的SourceObject
是表或查询而不是实际的表单对象,情况会变得更加复杂。我自己还没有研究过这些变体的细节,但如果你真的想使用 SubformControl.Form.property 模式,我建议你研究一下。
我只使用Forms!Form1!Subform1!control1
之类的东西,这对我来说不太容易混淆。
【讨论】:
这一行:fails because Subform1 is a control, not a form object, and it does not include a property named control1.
绝对是一个清晰的时刻。这也解释了为什么说.Form
有点像将控件“强制转换”为表单,然后它再次“正常”地运行。
很好,我为此苦苦挣扎。 ;-) RE 评论的最后一部分,我想说.Form
指的是包含在子表单控件中的表单对象。该表单对象支持名为 control1 的属性,但子表单 control 不支持。【参考方案2】:
bang (!) 运算符访问集合中的默认属性和对象。
显然Subform.Form
是Subform
控件的默认属性,Controls
集合是Form
类的默认属性。因此,您可以使用Subform!ControlName
访问子表单上的控件。但是,如果您说Subform.ControlName
,您专门尝试访问Subform
控件的名为“ControlName”的属性。而那个不存在。
银行 (!) 运算符搜索匹配的对象。点 (.) 运算符假定直接引用现有属性。
【讨论】:
以上是关于在子窗体中引用控件的主要内容,如果未能解决你的问题,请参考以下文章