范围地址,我在哪里find工作表?

我在UDF上工作,用户input一个范围,比如“sheet1!A1:C8”。

在VBA中,我写了以下内容:

Function RelativeSearch(Search, rng As Range, Row, Column) MsgBox rng.Address 

这里的msgbox只给我A1:C8。 我怎样才能得到“Sheet1”?

我曾尝试将rng作为string,但这不起作用,因为我必须稍后在代码中使用rng.find。

任何人都知道如何从范围内获取表单?

Range对象有一个Worksheet属性,所以:

rng.Worksheet.Name将做你想要的。

另外Address属性还有一个External参数,所以:

rng.Address(External:=True)产生整个范围地址,例如[Book1]Sheet1!$D$28

要获得对Sheet的参考,请使用rng.Parent 。 在你的具体情况下,你正在寻找rng.Parent.Name

所以你可以做

 MsgBox rng.Parent.Name & "!" & rng.Address 

这不是你问的问题的答案,但我想这可能会帮助你避免提问。

如果您正在尝试在rng查找作为Search传递的值,然后返回由RowColumn进行的某个偏移量所得到的值,则无需知道工作表rng位置:

Excel公式(也许在单元格Sheet4!D6中):

 =RelativeSearch("b",Sheet1!A1:A6,3,2) 

将在Sheet1中的范围A1:A6中search值“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) 。)