是否可以将私有子合并到 VBA 访问中的函数中?

Posted

技术标签:

【中文标题】是否可以将私有子合并到 VBA 访问中的函数中?【英文标题】:Is it possible to incorporate a private sub into a function in VBA access? 【发布时间】:2018-10-10 17:34:50 【问题描述】:

基本上我想使用一个函数或 sub 来“粘贴”代码,这样我就不必一遍又一遍地粘贴相同的东西。我对 VBA 有点陌生,所以我不确定是否有更简单的方法来处理这个问题。我有很多行组合框,它们将由它们前面的相应文本框确定。我只想放置一个带有数字的函数/子程序来指定组合框。

Function cboAfterUpdate (x as Variant)
    Private Sub cboOperation &x& _AfterUpdate()
     'some other function that uses x'
    End Sub
 End Funcion

我希望它会像这样结束......

 cboAfterUpdate(5)

将显示..

 Private Sub cboOperation5_AfterUpdate()
   'some other function that uses 5'
 End Sub

换句话说,我想这样做

Private Sub cboOperation1_AfterUpdate()
Call SqlDes(1)
End Sub
Private Sub cboOperation2_AfterUpdate()
Call SqlDes(2)
End Sub
Private Sub cboOperation3_AfterUpdate()
Call SqlDes(3)
End Sub

自从我拥有 cboOperation(1-20) 组合框以来最多 20 次。我怎样才能在一个函数中做到这一点而不必复制/粘贴/键入 20 个私有子事件?

【问题讨论】:

不,这根本不可能。 这样的声音最好由a control array处理。 谢谢-共产国际我去看看 不太清楚你在这里问什么 - 你的意思是你想添加很多具有相同代码的组合框,或者你想运行相同的代码但传入的组合框作为变量? Making modular VBA function (MS Access)的可能重复 【参考方案1】:

我可能会在我的组合框后面加上一个数字,并使用它们的Caller 属性通过它们的字符串名称提供您想要的参数。例如。创建 3 个组合框并将它们命名为 cbo_1、cbo_2 和 cbo_3。然后为它们分配一个子:

Sub CboHasChanged()

Dim cboNumber As Integer

Msgbox Application.Caller & " is about to call the sub SqlDes!", vbinformation
cboNumber = CInt(Right(Application.Caller, 1))
SqlDes cboNumber

End Sub

当然,您可以使字符串操作更复杂,以解释具有两位数的数字等等,但我希望您明白 - 使用组合框的名称来提供所需的值。

顺便说一句,你不需要像那样调用你的 sub,只需将 sub 名称放在任何不带括号的参数中,就像我在示例中所做的那样。

如果你真的想用代码it is possible in VBA写代码但是是一个高级主题。

【讨论】:

以上是关于是否可以将私有子合并到 VBA 访问中的函数中?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以为特定记录禁用/启用访问子表单中的控件?访问 2000 - VBA

函数中的私有变量和特权方法

访问 VBA 以拆分 Excel 中的所有合并单元格

VBA:私有子中的编译错误 ByRef 参数类型不匹配

访问VBA:将表单/子表单名称传递给函数?

用vba新建工作表,并命名