2017-10-11 6 views
0

私はさまざまなレポートをエクスポートするマスターファイルを持っていますが、書式を維持するためにシート全体をコピーすると、そのファイルに名前付き範囲が付きます。VBAの名前の範囲は実際よりも高いと計算されます

私はすべてのリンクを解除するには、これらを削除する必要があり、そのような取り除かバージョン:私はIf .Names.Count > 0 Thenでブレークした場合、カウントは6と表示されたホバリング時に、私はしかし名前マネージャー、見ることができます

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 

activesheetには2つの名前しかありません。

Names.Countはちょうど名前付き範囲を超えていますか?好奇心のうち

EDIT

は私が走った次のように、これらの=#NAME?の名前が何であるか、またはそれらがある場合でも、この

='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 

ないアイデアを生み出していない

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

それらはネームマネージャに表示されず、削除しようとすると構文が正しくないというエラーがスローされますそれら。名前付き範囲またはコレクションから何かを削除

答えて

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

ありがとう、私はこの方法を使用しますが、構文エラーが残っている、これらの神話的な名前を見つけることができないか、それらを削除することはできません。 –

関連する問題