我有一系列文本框,我想在表单加载时评估,以更改表单的其他一些元素。我想要创建一个函数,而不是逐行处理它们。如何将文本框的名称传递给函数。例如:
Private Sub Form_Load()
Call SetIntialToggleValue(MyTextboxName)
End Sub
Private Sub SetIntialToggleValue(ByRef ControlName As Control)
MsgBox ControlName.Value
End Sub
这给了我MsgBox行上的“Object required”错误。这让我觉得我没有正确地传递文本框控件。
答案 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
是它自己的类型。