我在UDF上工作,用户输入一个范围,比如“sheet1!A1:C8”。
在VBA中,我写了以下内容:
Function RelativeSearch(Search, rng As Range, Row, Column)
MsgBox rng.Address
这里的msgbox只给我A1:C8。我如何获得“Sheet1”?
我曾尝试将rng作为字符串,但这不起作用,因为我必须在代码中使用rng.find。
任何人都知道如何从范围中获取工作表吗?
答案 0 :(得分:2)
Range
对象具有Worksheet
属性,因此:
rng.Worksheet.Name
会做你想做的事。
此外,Address
属性具有External
参数,因此:
rng.Address(External:=True)
会产生整个范围地址,例如[Book1]Sheet1!$D$28
。
答案 1 :(得分:1)
要获得对3
的引用,请使用Sheet
。
在您的具体情况下,您正在寻找rng.Parent
。
所以你可以做到
rng.Parent.Name
答案 2 :(得分:1)
这不是您提出的问题的答案,但我怀疑这可能有助于您避免提出问题。
如果您尝试在rng
内找到传递为Search
的值,然后返回由Row
和Column
的某个偏移量导出的值,那么无需知道工作表rng
是什么:
Excel公式(可能在单元格Sheet4!D6中):
=RelativeSearch("b",Sheet1!A1:A6,3,2)
代码将在Sheet1中搜索范围A1:A6中的值" b"然后从下面3行和右边2列的单元格中返回值:
Function RelativeSearch(Search, rng As Range, Row, Column)
Dim r As Range
Set r = rng.Find(What:=Search, LookIn:=xlValues, LookAt:=xlWhole)
If r Is Nothing Then
RelativeSearch = CVErr(xlErrNA)
Else
RelativeSearch = r.Offset(Row, Column).Value
End If
End Function
(如果您希望它与VLOOKUP
的语法保持一致,则需要使用r.Offset(Row - 1, Column - 1)
而不是r.Offset(Row, Column)
。)