2017-10-11 74 views
0

我有一個主文件,導出各種報告,但是當我複製整個表(保持格式等),它攜帶命名範圍。VBA命名範圍數高於實際

我需要刪除這些打破各個環節,剝離出來的版本,像這樣:

Sub buildreport() 
    ThisWorkbook.Worksheets("Report").Copy 
    With ActiveWorkbook 
    'various things 
     If .Names.Count > 0 Then 
      For Each Name In .Names 
       Name.Delete 
      Next Name 
     End If 
    End With 
End Sub 

如果我在If .Names.Count > 0 Then打破然後我可以徘徊在計數顯示爲6時看到,無論該名經理爲activesheet只有2個名稱。

是否Names.Count計數超過剛剛命名的範圍?

編輯

出於好奇,我跑了以下

With ActiveWorkbook 
    For Each Name In .Names 
     Debug.Print Name 
    Next Name 
End With 

它生產這個

='GTM Roles'!$A$2:$BF$1387 
=#NAME? 
=#NAME? 
=#NAME? 
=OFFSET('[GRT MASTER mini.xlsm]All Roles'!$A$2, 0, 0, COUNTA('[GRT MASTER mini.xlsm]All Roles'!$A:$A)-1, COUNTA('[GRT MASTER mini.xlsm]All Roles'!$2:$2)) 
='[GRT MASTER mini.xlsm]index'!$I$2:$I$10 

不知道這些=#NAME?名稱,甚至他們在哪裏,因爲它們沒有顯示在名稱管理器中,並在嘗試刪除時拋出語法不正確的錯誤他們。

回答

0

刪除指定範圍或集合任何通常與指標完成和逆轉計數:

Public Sub TestMe() 

    Dim cnt  As Long 

    For cnt = ActiveWorkbook.Names.Count To 1 Step -1 
     Debug.Print ActiveWorkbook.Names.Item(cnt).Name 
     ActiveWorkbook.Names.Item(cnt).Delete 
    Next cnt 

End Sub 

的原因是,收藏就像在某種程度上黑手黨對象 - 大家都知道只是下一個,從而如果你用for-each循環刪除當前的那個,你將打破這個集合。

+0

謝謝你的幫助,我會用這個方法前進,但是語法錯誤依然存在,找不到這些神話的名字,也不允許刪除它們。 –