【问题标题】:Passing text box control to private sub/function将文本框控件传递给私有子/函数
【发布时间】:2014-11-05 17:53:01
【问题描述】:

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

Private Sub Form_Load()

    Call SetIntialToggleValue(MyTextboxName)

End Sub

Private Sub SetIntialToggleValue(ByRef ControlName As Control)

    MsgBox ControlName.Value

End Sub

这给了我 MsgBox 行上的“需要对象”错误。这让我觉得我没有正确传递文本框控件。

【问题讨论】:

    标签: vba ms-access


    【解决方案1】:

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

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

    dim MyTextBoxName as Control
    

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

    Private Sub SetIntialToggleValue(ByRef ControlName As String)
    
        MsgBox Form.Controls(ControlName).Value
    
    End Sub
    

    【讨论】:

      【解决方案2】:

      下面的内容怎么样:

      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
      

      【讨论】:

      • 如果您只打算使用一种方法,请不要将变量声明为全局变量... Dim 语句应该放在 Form_Load() 方法中。
      【解决方案3】:

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

      Private Sub SetIntialToggleValue(ByRef ControlName As MSForms.TextBox)
      

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2020-08-03
          • 1970-01-01
          • 2018-07-02
          • 1970-01-01
          • 2017-08-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多