我在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
复制相似问题