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

时间:2014-11-05 17:53:01

标签: vba ms-access

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

Private Sub Form_Load()

    Call SetIntialToggleValue(MyTextboxName)

End Sub

Private Sub SetIntialToggleValue(ByRef ControlName As Control)

    MsgBox ControlName.Value

End Sub

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

4 个答案:

答案 0 :(得分:8)

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

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

dim MyTextBoxName as Control

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

Private Sub SetIntialToggleValue(ByRef ControlName As String)

    MsgBox Form.Controls(ControlName).Value

End Sub

答案 1 :(得分:4)

如下所示:

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

答案 2 :(得分:1)

我找到了答案here。你可以声明:

Private Sub SetIntialToggleValue(ByRef ControlName As MSForms.TextBox)

答案 3 :(得分:0)

目前,您没有传递文本框的名称。您正在传递文本框对象本身。您确实在方法中将其引用为Control,但如果您只使用文本框,则可以将Control替换为Textbox。实际上,Textbox是它自己的类型。