2016-01-18 2 views
1

У меня есть именованный диапазон в Excel, который я пытаюсь очистить с помощью VBA.Ссылка на многолистовой именованный диапазон в VBA

Проблема с диапазоном заключается в том, что он охватывает несколько листов, и я не уверен, как правильно ссылаться на именованный диапазон в VBA, поскольку он охватывает несколько листов.

именованный диапазон «Графы» установлен в УПРАЖНЕНИЯ сферу со следующими ссылками на ячейки:

=Sheet1!$A$1, Sheet2!$A$1, Sheet3!$A$1 

При очистке именованный диапазон, где он только клетки, на который ссылается на одном листе я использую следующее:

ThisWorkbook.Sheets("Sheet1").Range("Counts").ClearContents 

Я пробовал следующее, но ни один из них не работал.

ThisWorkbook.Range("Counts").ClearContents 

и

Range("Counts").ClearContents 

Последнее дает мне глобальную ошибку.

+1

Как вы определили название диапазона на нескольких листах? Можете ли вы опубликовать формулу названия диапазона? – teylyn

+0

Я добавил это теперь к первоначальному вопросу –

+0

Microsoft говорит, чтобы сделать это, но это также не работает Sub ClearRange() Application.Goto Ссылка: = «MyRange» Selection.ClearContents End Sub –

ответ

2

Вместо того диапазона, который проходит через несколько листов (который не работает, так как мы установили), вам нужно диапазон листов в каждом листе.

При определении названия диапазона вы можете установить его область действия для рабочей книги или текущего листа. Таким образом, вы можете иметь одинаковое имя диапазона во многих листах.

Используйте VBA для перемещения по всему листу, откройте ws.Range («TheRangeName») на текущем листе и очистите его содержимое.

Это более чистый подход.

1

Я хотел бы написать что-то, что отображает имена и вы можете использовать, чтобы удалить его ...

В ближайшем окне:

For i = 1 to names.count:Debug.print i, Names(i).RefersTo, Names(i).name:next 

Вы можете либо использовать е имя или индекс к удалите нужное имя.

Надеюсь, что это поможет.

+0

Я думаю, что вы, возможно, неправильно истолковали то, что я хотел, я хотел очистить значения из именованного диапазона, не удаляя имя –

0

Rory Archibald является Microsoft MVP

На его website post about named ranges он утверждает, что: объект Range может относиться только к ячейкам на одном листе. Вы не можете ссылаться на ячейки на разных листах с одним объектом Range.

Поэтому я не могу выполнить то, что я хотел, но я должен был бы просто создать несколько именованных диапазонов и просто очистить их по одному.

я смог завершить код для этого, как следует с вдохновением от teylyn

Public Sub ClearRanges() 
'Checks if named Range exists on sheet if it does then clear contents 

    Dim ws As Worksheet 

    Application.DisplayAlerts = False 

    For Each ws In ThisWorkbook.Worksheets 
     If Len(ws.Range("Counts").Name) <> 0 Then 
      ws.Range("Counts").ClearContents 
     End If 
    Next ws 

    Application.DisplayAlerts = True 
End Sub 
Смежные вопросы