詳細說明一下,假設我在工作簿中有兩個命名範圍。兩個命名範圍具有相同的名稱(比如說「myName」),但其中一個範圍爲Sheet1,另一個範圍爲工作簿。重複名稱時,通過Excel工作簿中的字符串獲取命名範圍
給定命名範圍的名稱(字符串),我想抓取工作簿級命名範圍。
如果我使用本地調用:wb.Names.Item("myName")
,它將返回工作表範圍命名範圍。
如果我這樣做:wb.Names.Item("Sheet1!myName")
,這顯然返回工作表範圍的名稱範圍。我發現我可以使用它來指定特定表格,但不是工作簿。
有無論如何我可以指定我想工作簿作用域?
我的解決方法是遍歷所有名稱的列表,並比較.Name屬性以獲取工作簿作用域命名範圍。這是因爲.Name屬性附加了「Sheet1!」到工作表範圍的命名範圍。然而,這樣做非常昂貴,我想避免它。
這是不是100%清楚地知道你是如何使用範圍。如果你想設置一個範圍對象爲一個名字串然後'Set rng1 = Range(「myName」)'將返回本地表名的範圍,如果* sheet1是活動的*否則它將返回工作簿名稱的範圍。我認爲這是最乾淨的解決方法 - 即在查看使用名稱作爲工作簿範圍之前,測試活動工作表與承載本地名稱的工作表不同。合理? :) – brettdj
您還可以將parent.name與工作簿名稱進行比較,但您仍然需要遍歷名稱以提取該集合。 – nutsch
回覆:@ brettdj的評論。取決於你要實現的目標,最簡單的方法可能是在宏的開始處添加一個臨時表單,在代碼結束時刪除它。 – nutsch