将userform控件传递给sub

时间:2016-01-29 14:52:03

标签: vba excel-vba excel

我有两个潜艇:cmdSafe和checkTime。我想调用subCheck并传递一个userform控件。

Private Sub cmdSafe_click()
    Call checkTime(ufTimes.txtBegin)
End Sub

Sub checkTime(cntrl as Control)
    'Do something
End sub

在这种情况下,我在尝试调用sub时遇到错误。 Run-time error 424: Object required. 我去检查ufTimes.txtBegin,但这给出了文本框的值15

我希望能够通过将第一个子更改为以下内容来解决此问题:

Private Sub cmdSafe_click()
    Dim ctl as control
    ctl = ufTimes.txtBegin

    Call checkTime(ufTimes.txtBegin)
End Sub

这在Run-time error 91: Object variable or With block not set行上给了我另一个错误(ctl=ufTimes.txtBegin),可能是因为它试图将ctl设置为值。我该如何解决这个问题?我想传递一个控件,它也应该是一个ComboBox,例如

1 个答案:

答案 0 :(得分:2)

在Excel 2013中,等效似乎可以正常工作 - (编辑),前提是您在分配<\/p>变量时使用Set。我将一个CommandButton和一个TextBox添加到空白用户窗体,代码为:

Control

一种选择是使用Private Sub CommandButton1_Click() Dim c As Control Set c = TextBox1 '<-- works with "Set" Call DoSomething(UserForm1.TextBox1) '<-- also works End Sub Sub DoSomething(c As Control) MsgBox c.Text End Sub 代替TextBox - 如果可以,请更具体。

我的引用设置为VBA,Microsoft Excel 15.0对象库,OLE自动化,Microsoft Office 15.0对象库和Microsoft Forms 2.0对象库。