vba – 从函数返回一个范围值

我想传递一个范围值到一个函数,然后返回结果范围值回到我的子。

子:

Dim nettowertadresse As Range 

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

function:

 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 

第一个问题是我没有得到函数的范围值。 我认为我需要在searchAdress中使用.adress,但是这种方式不行。 也许与另一个对象,通过地址searchAdress? 但无论如何,我得到错误91.请告知如何将函数中find的单元格的地址返回到我的子variablesnettowertadresse。

你有两个问题:

  1. 运行时错误“91”:对象variables或块variables未设置
  2. 没有看到你有一个Range对象被返回

1 – 运行时错误“91”

对于第一个错误,原因是你调用你的Function 。 正如Fratyx指出的那样, 在调用searchAdress()时需要使用关键字Set

你也可以在下面看到:

  • vba中的dim和set有什么区别?
  • 从函数返回一个范围
  • Excel中的VBA函数可以返回一个范围吗?

原因是你正试图把一个对象结果赋给你的variables。 在VBA中设置对象时,使用Set关键字。

2 – 没有看到一个Range对象

代码根据需要返回一个Range对象。 您可以通过一些debuggingtesting代码来确认这一点:

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

要么

 MsgBox nettowertaddresse.Address 

这将select您的单词在其中的单元格,或在popup框中显示地址。

您可能正在使用MsgBox()或hover在编辑器中的variables,它正在返回实际的范围值( nettowertadresse.value


这两个问题都与你的问题有关,这些问题解决了这些完全相同的问题,但是在你开始使用你自己的function之前:

  • 使用With,Range和.Find时遇到vba error 91问题

看看这里的答案直接关系到我给你的解释。 不同的是,你现在正在使用你自己的function,但是基本的基本问题仍然是一样的。

在调用searchAddress写入

 Set nettowertadresse = searchAdress(.....) 

问题在于将searchAdress的返回值分配给nettowertAddress