在子表单中引用控件
Referencing Controls in Subforms
我无法准确确定以下示例的行为方式的原因。
作品:
Debug.Print Forms!Form1![Subform1]!control1
无效:
Debug.Print Forms!Form1![Subform1].control1
有错误:
Run-time error '438':
Object doesn't support this property or method
乍一看,我只是假设 .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
却无效?
bang (!) 运算符访问集合中的默认属性和对象。
显然Subform.Form
是Subform
控件的默认属性,Controls
集合是Form
class默认的属性 .因此,您可以使用 Subform!ControlName
访问子表单上的控件。但是,如果您说 Subform.ControlName
,则您专门尝试访问 Subform
控件的名为 "ControlName" 的 属性。而那个并不存在。
银行 (!) 运算符搜索匹配对象。点 (.) 运算符假定直接引用现有的 属性。
在许多情况下,Access 表单对象 允许您访问其控件和记录源字段,就好像它们是表单的 属性 .这意味着您可以在该表单中编辑 VBA 代码时使用 Intellisense,因此您可以使用 Me.control1
或 control1 引用名为Me.control1.Value
该功能也是 Debug.Print Forms!Form1!Subform1.Form.control1
可以 工作的原因。但是 Debug.Print Forms!Form1!Subform1.control1
失败,因为 Subform1 是一个控件,而不是 form 对象 ,并且它不包含一个 属性 命名control1。 (这就是错误消息所抱怨的。)
如果您的子表单的 SourceObject
是 table 或查询而不是实际的表单对象,情况会变得更加复杂。我自己还没有研究过这些变体的细节,但如果你真的想使用 SubformControl.Form.property 模式,我建议你研究一下它们。
我只是使用类似 Forms!Form1!Subform1!control1
的东西,这对我来说不那么令人困惑。
我无法准确确定以下示例的行为方式的原因。
作品:
Debug.Print Forms!Form1![Subform1]!control1
无效:
Debug.Print Forms!Form1![Subform1].control1
有错误:
Run-time error '438':
Object doesn't support this property or method
乍一看,我只是假设 .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
却无效?
bang (!) 运算符访问集合中的默认属性和对象。
显然Subform.Form
是Subform
控件的默认属性,Controls
集合是Form
class默认的属性 .因此,您可以使用 Subform!ControlName
访问子表单上的控件。但是,如果您说 Subform.ControlName
,则您专门尝试访问 Subform
控件的名为 "ControlName" 的 属性。而那个并不存在。
银行 (!) 运算符搜索匹配对象。点 (.) 运算符假定直接引用现有的 属性。
在许多情况下,Access 表单对象 允许您访问其控件和记录源字段,就好像它们是表单的 属性 .这意味着您可以在该表单中编辑 VBA 代码时使用 Intellisense,因此您可以使用 Me.control1
或 control1 引用名为Me.control1.Value
该功能也是 Debug.Print Forms!Form1!Subform1.Form.control1
可以 工作的原因。但是 Debug.Print Forms!Form1!Subform1.control1
失败,因为 Subform1 是一个控件,而不是 form 对象 ,并且它不包含一个 属性 命名control1。 (这就是错误消息所抱怨的。)
如果您的子表单的 SourceObject
是 table 或查询而不是实际的表单对象,情况会变得更加复杂。我自己还没有研究过这些变体的细节,但如果你真的想使用 SubformControl.Form.property 模式,我建议你研究一下它们。
我只是使用类似 Forms!Form1!Subform1!control1
的东西,这对我来说不那么令人困惑。