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。
你有两个问题:
- 运行时错误“91”:对象variables或块variables未设置
- 没有看到你有一个
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