Как макросом удалить лишние имена диапазонов в книге

Программирование на Visual Basic for Applications
Franck
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 09.04.2004 (Пт) 12:21

Как макросом удалить лишние имена диапазонов в книге

Сообщение Franck » 02.02.2006 (Чт) 14:11

Такая ситуация. В рабочей книге присутстует много имен ячеек уровня Workbook (видны, если выбрать Вставка-Имя-Присвоить), которые ссылаются на внешние файлы типа

='C:\My Download Files\Excel\[fin_analis_3_0.xls]Balance'!$C$172

или вообще выдают ошибку типа

=#REF!$7:$7

Как макросом можно их удалить? :?:
Конечно, можно просто удалить все вот так:
Код: Выделить всё
Sub DeleteExternalNames()
Dim n As Name
Dim count As Integer
For Each n In ActiveWorkbook.Names
n.Delete
count = count + 1
Next n
MsgBox "Все имена в количестве " & count & " удалены"
End Sub


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

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.02.2006 (Чт) 14:22

Если n.referestorange существует, и если n.referstorange.worksheet.parent is thisworkbook, то не удалять.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Franck
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 09.04.2004 (Пт) 12:21

Сообщение Franck » 02.02.2006 (Чт) 15:12

Не получается. :( Ошибку выдает.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.02.2006 (Чт) 15:33

Я мог бы спросить "где и какую". Но не буду. Видимо, человек имеет чёткое намерение помочь себе сам. Не вопрос.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Franck
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 09.04.2004 (Пт) 12:21

Сообщение Franck » 02.02.2006 (Чт) 15:42

Извините, плиз.
У меня с синтаксисом проблемы
на строку Set r = n.RefersToRange ругается, выдает ошибку с кодом 91. Я не профессиональный программист, поэтому даже такой макрос для меня труден, с утра уже бьюсь. :(

Franck
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 09.04.2004 (Пт) 12:21

Сообщение Franck » 02.02.2006 (Чт) 18:34

GSerg
Спасибо за совет! Разобрался, все просто оказалось. Проверку на ошибку забыл вставить.

Код: Выделить всё
Set r = Nothing
      On Error Resume Next
      Set r = n.RefersToRange
If r Is Nothing Then
n.Delete

и т.д.


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList