我在UDF上工作,用户输入一个范围,比如"sheet1!A1:C8“。
在VBA中,我写了以下内容:
Function RelativeSearch(Search, rng As Range, Row, Column)
MsgBox rng.Address在这里,msgbox只给我A1:C8。我怎样才能得到"Sheet1“呢?
我曾尝试将rng作为字符串,但这不起作用,因为我必须在代码的后面使用rng.find。
有人知道从靶场拿床单的方法吗?
发布于 2017-08-13 18:33:37
Range对象具有一个Worksheet属性,因此:
rng.Worksheet.Name会做你想做的事。
此外,Address属性有一个External参数,因此:
rng.Address(External:=True)产生整个范围地址,例如,[Book1]Sheet1!$D$28。
发布于 2017-08-13 18:03:09
要获得对Sheet的引用,请使用rng.Parent。在您的具体情况下,您正在寻找rng.Parent.Name。
所以你可以
MsgBox rng.Parent.Name & "!" & rng.Address发布于 2017-08-13 21:33:30
这不是你提出的问题的答案,但我怀疑它可能有助于你避免不得不问这个问题。
如果您试图在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)。)
https://stackoverflow.com/questions/45663304
复制相似问题