2017-08-13 22 views
0

我在UDF上工作,用戶輸入一個範圍,比如說「sheet1!A1:C8」。範圍地址,我在哪裏找到工作表?

在VBA我寫了以下內容:

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

這裏只MSGBOX給我A1:C8。我怎樣才能得到「Sheet1」?

我曾嘗試將rng作爲字符串,但不起作用,因爲我必須稍後在代碼中使用rng.find。

任何人都知道一種方法來獲取範圍內的工作表?

+1

的問題是...爲什麼你需要知道什麼是紙被提及?我想不出任何真正的原因,爲什麼一個寫得好的UDF需要知道這些信息 - 你應該能夠使用'rng'作爲'Range'對象,而不用擔心它的工作表甚至是工作簿存在於。 – YowE3K

+0

@ YowE3K我需要它來了解要查看的表單。 UDF要求提供搜索針,搜索範圍以及列和行偏移量。我發現範圍內的針和操縱範圍與偏移行和列。所以基本上這是一個「查找」,它更靈活一些,因爲它可以在表格中從相匹配的位置上下/左右移動。偏移地址不是問題,但是由於工作表沒有在地址上進行,這意味着它在sheet5上匹配並且從sheet1返回值。 – Andreas

+0

我還沒有時間看這裏的答案,明天會這樣做,但他們都看起來是正確的。謝謝你們倆。 – Andreas

回答

2

Range對象有一個Worksheet屬性,因此:

rng.Worksheet.Name會做你想要什麼。

另外Address特性具有External參數,因此:

rng.Address(External:=True)產生的整個範圍內的地址,例如,[Book1]Sheet1!$D$28

1

要獲得對Sheet的參考,請使用rng.Parent。 在您的具體情況下,您正在尋找rng.Parent.Name

所以,你可以做

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

這不是你問的問題的答案,但我懷疑這可能會幫助你避免提問。

如果你正在努力尋找,內rng的值作爲Search傳遞,然後返回一些通過和Column偏移得出的值,所以沒有必要知道什麼工作表rng是:

Excel公式(也許在細胞Sheet4 D6!):

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

代碼,其將搜索範圍A1:A6在Sheet爲值「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)

相關問題