从函数更改访问表单属性

时间:2018-06-18 13:56:09

标签: vba ms-access

我试图将OnClick代码从表单上的某个按钮移动到某个功能,但我遇到了一些问题。有问题的按钮称为"重置",它会更改表单上大多数对象的属性。像:

Me.btnName.Caption = "Caption"
Me.btnName.Visible = True
Me.btnName.Top = 123
Me.btnName.Height = 456
'Etc

当把它移到一个函数上时,我似乎无法让它工作。我尝试了几种不同的写作方式,这是我在搜索时发现的,但它们似乎都没有用。我弄乱了主要形式的一些对象和子表单中的一些对象,所以我将展示两者的一些例子。编辑包含错误消息

Forms("FormName").btnName.Caption = "Caption"
'Application-defined or Object-defined error

Forms("FormName").Controls("btnName").Caption = "Caption" 
'Ms Access cannot find the referanced form (I've double and triple checked that it is correct)

Forms("FormName").SubFormName.Form.btnName.Caption = "Caption" 
'Application-defined or Object-defined error

Forms!FormName!btnName.Caption = "Caption" 
'Cannot find the referenced form

Forms!FormName!SubFormName!btnName.Caption = "Caption" 
'Cannot find the field reffered to in your expression

Forms!FormName.Controls!btnName.Caption = "Caption" 
'Cannot find the referanced form

Forms!FormName!SubFormName!Form.btnName.Caption = "Caption" 
'MS Access can't find the field 'SubFormName'

无论我尝试这些,我似乎无法让它发挥作用。也许我只是做了一些简单的错误,或者也许你不能从一个函数中改变这样的属性。无论如何,如果有人知道,我会很感激帮助。

请注意,我尝试使用的功能是在一个单独的模块中,而不是在表单后面的代码中。

2 个答案:

答案 0 :(得分:3)

所以你在某个窗体的代码隐藏中有一个OnClick处理程序,负责为生活在该窗体上的对象分配一堆属性

您所做的是封装:外部代码无需关心表单{{1}的TopHeight属性(以及其他属性)按钮 - 事实是,外部代码甚至不需要关心表单上有一个按钮。

因此,您正在使用这个封装良好的对象,并且没有明显的原因移动代码。

如果您需要从外部调用该功能,那么请将其移出btnName处理程序..但不在表单的代码隐藏之外。

将其移至某个OnClick过程,如果外部代码需要调用该逻辑,则让其调用Public Sub OnReset()

theForm.OnReset

这样你就可以在表单中留下表单的实现细节,同时给外部代码一个抽象来说“我不在乎你的按钮是什么名字;我不在乎它们的大小或它们的标题是什么 - 但是当我说'重置'时,你应该重新初始化你为它们获得的任何值“ - 外部代码不需要知道Private Sub ResetButton_Click() OnReset End Sub Public Sub OnReset() Me.btnName.Caption = "Caption" Me.btnName.Visible = True Me.btnName.Top = 123 Me.btnName.Height = 456 'Etc End sub 做什么具体地

这样说:重命名Reset按钮的那一天,您是否需要简单地调整表单的代码隐藏,或者搜索整个项目中可能正在更改该按钮的每个可能位置btnName或其他任何财产价值?

FYI Caption是后期绑定代码,Foo!Bar.Something的简写:Foo.Item("Bar").SomethingBar都不会在编译时验证。与Something对比,其中编译器立即拾取拼写错误:编译器能够验证的早期绑定代码应始终是首选。

答案 1 :(得分:0)

您需要将属性设置为:

Forms!FormName!btnName.Caption = "New Caption"

或者,如果在子表单上:

Forms!FormName!<NameOfSubformCONTROL>.Form!btnName.Caption = "New Caption"