2016-07-18 59 views
0

我想要做的是從該範圍內的單元格獲取範圍名稱。我環顧四周,似乎所有人都建議使用.Name或.Name.Name但是當我嘗試.Name和.Name.Name似乎都不起作用,因爲我得到一個對象/應用程序定義的錯誤。從該範圍內的單元格獲取範圍名稱,.Name似乎沒有工作

我有一個電子表格設置,所以有一個範圍,每個單元格的單元格都在同一個範圍內的單元格下方。我最初只是使用標題單元格的.Value,但這會產生一些問題。我的程序做了各種各樣的事情,其中​​一個是創建一個單獨的工作表,其中只有一個單獨的範圍數據在該工作表上,並且其名稱與範圍名稱相同。然而,由於我無法命名超過30個字符的工作表(並且我無法在範圍名稱中使用除下劃線之外的空格或特殊字符,因此開始很難直觀地讀取標題單元格的內容)我一直試圖將範圍命名爲「傘項」,就像標題單元格是「Project Management something/something(something)...」一樣。「我可以將範圍命名爲ProjMgmt,因爲它更短,但它自從標題單元格和範圍名稱的值不相同。標題單元格是一個合併的單元格btw,如果重要的話,這些範圍名稱已經用名稱管理器手動分配,並且我正在使用excel 2010

編輯:側面問題:當您使用名稱管理器手動添加名稱時,將它們添加到workbook.Names或它應該去的地方?看起來像workbook.Names沒有填充任何其他以外的任何東西

這是我的代碼,我遇到了麻煩。這是一個循環,因此<內部> ORGNAME是當它進入一個新的範圍

If TempP.Value <> OrgName And TempP.Value <> "" Then 
    OrgName = TempP.Value 
...rest of code that works 

我想嘗試這樣

If TempP.Name <> OrgName And TempP.Value <> "" Then 
    OrgName = TempP.Name 

的東西我也有一個INRANGE功能,如果是確定電池是我從別處得到的,我可能能夠使用

Function InRange(Range1 As Range, Range2 As Range) As Boolean 
    Dim InterSectRange As Range 
    Set InterSectRange = Application.Intersect(Range1, Range2) 
    InRange = Not InterSectRange Is Nothing 
    Set InterSectRange = Nothing 
End Function 
+0

'ActiveWorkbook.Names'? – SeanC

+0

@SeanC你能詳細說明我將如何使用它嗎? – WalterC

回答

0

你可以用你這樣的INRANGE功能一起使用它在一定範圍內...

Dim ThisName As Name 
For Each ThisName In ActiveWorkbook.Names 
    If InRange(TempP, ThisName.RefersToRange) And TempP.Value <> "" Then 
     Set OrgName = ThisName 
    End If 
Next 

ThisName將顯示工作表名稱,但ThisName.Name將包含名稱管理器中顯示的範圍名稱。所以你只需要深入一層就可以看到你添加的名字。

+0

謝謝!這很好 – WalterC

相關問題