Ошибка выполнения при удалении именованного диапазона

Я не понимаю, почему я продолжаю получать сообщение «Ошибка времени выполнения« 1004 »: ошибка, определяемая приложением или объектом», при попытке удалить именованный диапазон.

Вот код, используемый для импорта данных из файла .csv и присвоения диапазону имени «история».

With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;C:\Users\<user name>\Downloads\history.csv", Destination:=Range(destCell))
    .Name = "history"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .TextFilePromptOnRefresh = False
    .TextFilePlatform = 437
    .TextFileStartRow = 3
    .TextFileParseType = xlDelimited
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = False
    .TextFileSemicolonDelimiter = False
    .TextFileCommaDelimiter = True
    .TextFileSpaceDelimiter = False
    .TextFileColumnDataTypes = Array(3, 1, 2, 1, 1)
    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery:=False
End With

Вот код, используемый для удаления именованного диапазона «история». Обратите внимание, что строка непосредственно перед ней отлично работает, чтобы найти именованный диапазон. Это просто не удалит имя.

Application.Goto Reference:="history"
ActiveWorkbook.Names("history").Delete

person y-i_guy    schedule 18.08.2014    source источник
comment
Ваш код будет работать в новом файле, но когда вы повторно запустите код, он создаст именованные диапазоны, такие как history_1, history_2 и т. д. Удивительно то, что даже если вы удалите именованный диапазон из именованного менеджера, можно увидеть вышеописанное поведение. . :)   -  person Siddharth Rout    schedule 18.08.2014
comment
Вы делаете точное заявление. Я обнаружил, что мне приходилось повторно открывать книгу, поскольку она создавала новое имя (history_1, _2 и т. д.) каждый раз, когда запускался код импорта. Однако это не вызывало ошибку Application-defined или Object-defined, с которой я постоянно сталкивался.   -  person y-i_guy    schedule 20.08.2014


Ответы (1)


Ответ: проблема заключалась в том, что рабочая книга использовала имя рабочего листа как часть атрибута имени именованного диапазона. В частности, для имени использовалась история! история.

Метод устранения неполадок. Я использовал следующий код, который был опубликован в ответ на аналогичный вопрос на странице http://www.ozgrid.com/forum/showthread.php?t=49079&page=2

Dim nameRng As Name 
Dim varVal As Variant 
On Error Resume Next 
For Each nameRng In ActiveWorkbook.Names 
    varVal = Range(nameRng.Name).Value 
    nameRng.Delete 
Next

Окно Locals в редакторе VBA показало, что nameRng.Name для этой переменной представляет собой строку «history! history».

Пересмотренный код: я удалил строку Application.Goto Reference:="history", так как она была по существу нефункциональной строкой кода (похожей на действие Select) и осталась с ней в качестве кода для удалите имя импортированного диапазона:

ActiveWorkbook.Names("history!history").Delete

Платформа: я использовал Excel 2013 в Windows 7 Professional.

person y-i_guy    schedule 19.08.2014