将文本框控件传递给私有子/函数

Ale*_*lex 7 ms-access vba

我有一系列文本框,我想在表单加载时评估,以更改表单的其他一些元素.我想要创建一个函数,而不是逐行处理它们.如何将文本框的名称传递给函数.例如:

Private Sub Form_Load()

    Call SetIntialToggleValue(MyTextboxName)

End Sub

Private Sub SetIntialToggleValue(ByRef ControlName As Control)

    MsgBox ControlName.Value

End Sub
Run Code Online (Sandbox Code Playgroud)

这给了我MsgBox行上的"Object required"错误.这让我觉得我没有正确传递文本框控件.

小智 8

如果我有足够的代表评论,我会要求澄清,但这里有一些想法:

如果您没有显式声明您的变量MyTextboxName,它将是变体类型.您无法将变量传递给对象参数.这可能就足够了:

dim MyTextBoxName as Control
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,你根本不会使用名字.如果要使用名称,则必须更改功能.更改签名以获取字符串,然后使用该字符串作为Controls集合的索引(如果Access Forms上有一个):

Private Sub SetIntialToggleValue(ByRef ControlName As String)

    MsgBox Form.Controls(ControlName).Value

End Sub
Run Code Online (Sandbox Code Playgroud)


Way*_*unn 5

像下面这样的怎么样:

Option Explicit
Dim ctl  as Control

Private Sub Form_Load()

    set ctl = Me.MyTextboxName
    Call SetIntialToggleValue(ctl)

End Sub

Private Sub SetIntialToggleValue(ByRef ControlName As Control)

    MsgBox ControlName.Value

End Sub
Run Code Online (Sandbox Code Playgroud)

  • 如果您只想使用一种方法,请不要将变量声明为全局变量...“Dim”语句应该放在“Form_Load()”方法中。 (5认同)

Leo*_*Rom 5

我在这里找到了答案。您可以声明:

Private Sub SetIntialToggleValue(ByRef ControlName As MSForms.TextBox)
Run Code Online (Sandbox Code Playgroud)