范围地址,我在哪里找到表格?

时间:2017-08-13 17:57:37

标签: excel vba excel-vba

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

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

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

这里的msgbox只给我A1:C8。我如何获得“Sheet1”?

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

任何人都知道如何从范围中获取工作表吗?

3 个答案:

答案 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的值,然后返回由RowColumn的某个偏移量导出的值,那么无需知道工作表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)。)