Страницы: 1
RSS
Удалить в диспетчере имен некорректные имена кодом VBA, имена содержащие ошибку #ИМЯ?
 
Ручками удаляет, кодом нет.
Файл-пример с кодом прилагаю.
Как красиво победить?
«Бритва Оккама» или «Принцип Калашникова»?
 
А никак. Это не имя, это штатная функция Excel, которой в данной версии нема. Макросом они не удаляются.
_xlfn.FLOOR.MATH = ОКРВНИЗ.МАТ (FLOOR.MATH)
Изменено: RAN - 27.03.2020 15:13:50
 
RAN, да ноги растут от этой функции. Но открываю я файл в Excel 2016, а там это функция есть (нет до 2010 включительно). Плюс руками я тоже могу удалить данное имя. Почему нельзя удалить программно?
«Бритва Оккама» или «Принцип Калашникова»?
 
bedvit, приветствую!
Гляньте тут
Изменено: Jack Famous - 27.03.2020 16:15:59 (некорректная ссылка)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous, приветствую! Посмотрел ссылку, там предлагается сделать это имя видимым (у меня с этим все ОК) и удалить вручную. Здесь и начинается мой вопрос :)
«Бритва Оккама» или «Принцип Калашникова»?
 
Здравствуйте, Виталий!
Мы используем для удаления имен макрос примерно в такой редакции (для систем с кодовой страницей Windows-1251 :)   )

Код
Sub DeleteErrorName()
    Dim n As Name
    Dim count As Integer
    If MsgBox("Удалить в книге все имена с ошибочными значениями? (без возможности востановления)", vbQuestion + vbYesNo) = vbYes Then
        On Error Resume Next
        For Each n In ActiveWorkbook.Names
            If n.Value Like "=[#]*" Then
                n.Delete
                If Err = 0 Then
                    count = count + 1
                Else
                    MsgBox "Ошибка при удалении имени " & n.Name
                    Err.Clear
                End If
            End If
        Next n
        MsgBox "Удалено имён - " & count
    End If
End Sub

Диалог "Диспетчер имен" умеет делать вещи, недоступные нам, простым макрописателям. А макрорекордер этого не понимает...

Чуть-чуть поэкспериментировал с файлом в Excel 2016. Если этот файл сохранить в формате .xlsm, закрыть и вновь открыть, то "плохое" имя исчезает.
Изменено: sokol92 - 27.03.2020 16:36:02
Владимир
 
Цитата
bedvit: там предлагается сделать это имя видимым
прошу прощения — не посмотрел
В таком случае, могу только поделиться макросом на создание списка имён
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Добрый день!
Не мог удалить пока не убрал в начале имени знак подчеркивания (Excel ругается на неправильное имя). А так без проблем:
Код
Sub Макрос1()
    Debug.Print ActiveWorkbook.Names("xlfn.FLOOR.MATH").Value
    If ActiveWorkbook.Names("xlfn.FLOOR.MATH").Value = "=#NAME?" Then
       ActiveWorkbook.Names("xlfn.FLOOR.MATH").Delete
    End If
End Sub
 
sokol92, Владимир, а у вас этот макрос только для ругани, или еще и удаляет такие  имена?
У меня за 10 лет, прошедших с того времени, как я озадачивался подобным, ничего не поменялось.
Цитата
Андрей_26 написал:
А так без проблем:
меняем кирпич, который не можем подвинуть, не кирпич из пенопласта, и, ура, двигаем.  :D
 
Здравствуйте, Андрей! Ругается от бессильной злобы :)  
Таких имен обычно совсем немного и их можно потом грохнуть в ручном режиме.
Относительно файла из #1 - "плохое" имя исчезает, если пересохранить в .xlsm (все версии Excel, начиная с 2007).
Изменено: sokol92 - 27.03.2020 17:03:24
Владимир
 
Действительно, пересохранил, закрыл, открыл и все "ОК"  !!! )))
 
Да sokol92, Владимир, видел что при пересохранении в другой формат имя пропадает. Но хотелось бы сделать красиво, без пересохранений. У клиента могут быть изменения в файле, которые он не захочет сохранять. А сохранять без ведома плохая практика. Выдавать запрос - костылики тоже не очень мне нравятся.
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
RAN написал: У меня за 10 лет
что-то сие не воодушевляет )

Цитата
RAN написал: меняем кирпич, который не можем подвинуть, не кирпич из пенопласта, и, ура, двигаем.  
Вопрос в том, как сделать это программно)

Цитата
sokol92 написал:
Мы используем для удаления имен макрос примерно в такой редакции
Владимир, я бы сделал бы такое условие на проверку
Код
If n.Value Like "*[#]REF!*" Or n.Value Like "*[#]NAME?*" Then
, что бы попадали и такие имена:
Изменено: bedvit - 27.03.2020 18:17:17
«Бритва Оккама» или «Принцип Калашникова»?
 
Если ничего не путаю, имена с ошибками удаляются без проблем. Не удаляются имена (_xlfn.*). Я создавал тему по этому вопросу, скорее всего на старом форуме. Решения не было.
Возможно С++ или C# помогут?.
 
Цитата
RAN написал:
Не удаляются имена (_xlfn.*).
Сейчас обнаружил, что не удаляются и имена (_xlcn.*) (умные таблицы?)
Причем пересохранение в другой формат результата не дает, а значит и этот путь закрыт (да и не очень он мне нравился)
Цитата
RAN написал:
Возможно С++ или C# помогут?.
знать бы куда тыкать.
«Бритва Оккама» или «Принцип Калашникова»?
Страницы: 1
Наверх