在 VBA 中,可以使用
Me
关键字来定义公共过程的可选参数的默认值吗?谷歌搜索一两个小时没有得到任何指导。
Access 前端中存在多个参数/搜索表单。其中每个表单都有一个组合框或列表框 (cboTargetForm),用于指定另一个表单作为目标表单。每个表单的代码隐藏模块中的相同代码会将此控件的值分配给字符串变量:
strTargetForm = Me.cboTargetForm
当然,代码隐藏模块中的Me
没有任何困难,但现在的目标是将这些模块的冗余代码重构为标准模块中的单个公共过程。该控件的值显然必须作为参数传递给公共过程。同时,每种表单上的控件名称都是相同的,因此具有默认值的可选参数非常有意义。
当前的想法是将公共功能定义为以下之一:
Sub UpdateTargetForm(strString As String, Optional strTargetForm As String = Me.cboTargetForm)
Sub UpdateTargetForm(strString As String, Optional frmMe As Access.Form = Me)
或者,也许是上述任何一个,同时引用包含
Me
的标识符。
问题是这些或类似的东西是否有效。
Me 是代码后面的表单或报表名称的简写引用。在通用模块中使用表单引用
Forms!formname.cboTargetForm
。但您希望表单名称是动态的。这变得很棘手。
Sub UpdateTargetForm(strString As String, Optional strTargetForm As String = "some default form name")
通用模块代码可构建表单控件参考:
Forms(strTargetForm).Controls("cboTargetForm")
只要传递的表单名称不是子表单,这就有效。