vba – 正确地将范围值传递给函数

在我的应用程序中,我调用一个函数并传递4个值来计算单元格地址:

nettowertadresse = searchAdress(Dateiname, CurrentSheet, "Nettowert", Range("A1:C60")) 

function:

 Function searchAdress(inputworkbook As String, inputsheet As String, inputsearchtext As String, inputrange As Range) As Range With Workbooks(inputworkbook).Sheets(inputsheet).Range(inputrange) Set searchAdress = .Find(inputsearchtext, LookIn:=xlValues) End With End Function 

现在的问题是,我得到错误1004“应用程序定义或对象定义的错误”,我认为也许范围不正确通过,因为debugging器跳转到该function时显示variables“input范围”没有值。 请给出一些关于如何使这个function工作的build议。 谢谢。

您的函数inputrange as Range声明inputrange as Range 。 这意味着你的函数内的对象是一个Range对象。

所以你不应该使用它作为.Range(inputrange) 。 而是尝试使用这个代码,它正确地把它作为一个Range对象:

 Function searchAdress(inputworkbook As String, inputsheet As String, inputsearchtext As String, inputrange As Range) As Range With Workbooks(inputworkbook).Sheets(inputsheet) Set searchAdress = inputrange.Find(inputsearchtext, LookIn:=xlValues) End With End Function 

另外请注意,代码中有另一个调用这个函数的错误。 当您将nettowertadressevariables赋值给返回值时,您需要使用关键字Set

 Set nettowertadresse = searchAdress(Dateiname, CurrentSheet, "Nettowert", Range("A1:BA2")) 

否则,您将遇到运行时错误“91”,您在后续问题中提到。

你添加一个Range到你的函数中的rangeobject,你的函数看起来像这样:

  With Workbooks(inputworkbook).Sheets(inputsheet).Range(Range("A1:C60")) Set searchAdress = .Find(inputsearchtext, LookIn:=xlValues) End With 

你应该改变这个:

 Function searchAdress(inputworkbook As String, inputsheet As String, inputsearchtext As String, inputrange As String) As Range With Workbooks(inputworkbook).Sheets(inputsheet).Range(inputrange) Set searchAdress = .Find(inputsearchtext, LookIn:=xlValues) End With End Function 

然后通过这个函数:

 nettowertadresse = searchAdress(Dateiname, CurrentSheet, "Nettowert", "A1:C60")