2014-04-28 57 views
1

我有一个名为cls_Utilitario下述方法类:传递表单对象作为一类参数在VBA

Public Function LimparCampos(arg_form As Object) 
    Dim campo As Control 

    For Each campo In arg_form.Controls 
     With campo 
      Select Case .ControlType 
       Case acComboBox, acTextBox 
        .Value = Null 
      End Select 
     End With 
    Next campo 

    Set campo = Nothing 
    Set arg_form = Nothing 
End Function 

我有以下代码的形式:

Private Sub btnNovo_Click() 
    Dim obj_Utilitario As cls_Utilitario 

    Set obj_Utilitario = New cls_Utilitario 
    obj_Utilitario.LimparCampos (Me.Form) 

End Sub 

如果我将参数改为“Object”类型,为什么不能工作?我也尝试了“Variant”和“Form”类型,但是失败了。

在此先感谢。

+1

我想问题在括号中。不要使用它们。并且不要仅使用Me.Form,而只是因为代码以表单的形式运行,所以Me指的是表单(希望Access在Excel中相同)。所以我认为这个调用应该看起来像这样:obj_Utilitario.LimparCampos Me – dee

+0

如果你将'arg_form'作为一个对象传递给'LimparCampos',那么我不认为'arg_form.Controls'会工作,除非你投射它返回为一个“表格”。 – DeanOC

+0

hi Dee和DeanOC。感谢您的快速帮助。它工作完美,没有像这样的括号:obj_Utilitario.LimparCampos Me.Form –

回答

5

变化

obj_Utilitario.LimparCampos (Me.Form) 

Call obj_Utilitario.LimparCampos (Me.Form) 

或者

obj_Utilitario.LimparCampos Me.Form 

在VBA中,您不能使用括号如果不存储在函数的返回值如图所示,使用变量或使用关键字Call

+0

Manu,非常感谢!它的工作完美没有像这样的括号:obj_Utilitario.LimparCampos Me.Form –