2017-08-31 198 views
0

通過Worksheet.Range("Name"),我可以得到一個命名範圍。檢查範圍是否是一個命名範圍

我正在尋找相反的操作:給定一個Range,檢查它是否有一個定義的名稱。

Tried .Name,但它提供了一個表達,而不是用戶定義的名稱:

? SheetDB.Range("VerPeriod").Address 
$C$1 
? SheetDB.Range("$C$1").Name 
=БазаСИ!$C$1 

的意圖是:我想用一列的用戶定義的名稱,以獲得從給定行的值,而不是它的位置可以提高代碼的可讀性和可維護性。爲此,我會將每個標題單元格命名爲一個範圍。這可以通過一個類模塊來實現,所以在設置代碼中可以掃描標題行並使其成爲a hash table{name: column number}。 (撇開多少保證這個優化是,問題仍然存在。)

+2

爲什麼不能僅看通過'Names'集合,看看命名範圍'RefersTo'之一是指你是什麼看着?但我不確定我是否理解你爲什麼要這樣做 - 你想獲取已知的單元格位置,將其轉​​換爲命名範圍,以便隱式使用命名範圍的RefersTo來獲取開始的地址? – YowE3K

+0

@ YowE3K請參閱更新 –

+0

我仍然不確定我是否理解需要反向工作,特別是如果每​​列都有一個命名範圍。即如果一個列的頭部爲「XYZ」,並且因此您有一個名爲(可能)的「Col_XYZ」範圍(僅指頭部),則列本身可以作爲「Columns(Range(」Col_XYZ「)。Column)或行'r'上該列內的單元格可以由'Cells(r,Range(「Col_XYZ」)。Column)'引用。所以我只是不明白爲什麼你需要查看該列(可能是5)在單元格E1中具有「XYZ」標題,以便您可以發現引用單元格E1的範圍名稱是「Col_XYZ」。 – YowE3K

回答

2

你只是一個財產了。

當您編寫SheetDB.Range("$C$1").Name時,會返回一個Name對象。

所需的Name對象的屬性實際上是該Name對象的Name屬性。

所以:

SheetDB.Range("$C$1").Name.Name會給你「VerPeriod」只要你想

+0

實際上,對於我來說,它會返回「」БазаСИ!VerPeriod「',因爲我將該名稱設置在該工作表的作用域中。 –

相關問題