删除命名范围时出现运行时错误

时间:2014-08-18 17:07:08

标签: excel-vba named-ranges vba excel

我不明白为什么在尝试删除命名范围时,我一直收到“运行时错误'1004':应用程序定义或对象定义错误”消息。

以下是用于从.csv文件导入数据的代码,并将范围命名为“history”

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

1 个答案:

答案 0 :(得分:5)

答案:问题在于,工作簿使用工作表名称作为命名范围的Name属性的一部分。具体来说,它使用历史!历史名称。

排查方法:我使用了以下代码,这些代码已发布到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

VBA编辑器中的Locals窗口显示该变量的nameRng.Name是字符串&#34; history!history&#34;。

修改后的代码:我删除了Application.Goto参考:=&#34;历史&#34; line,因为它本质上是一个非功能性的代码行(类似于Select操作),并留下这个作为删除导入范围名称的代码:

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

平台:我在Windows 7专业版上使用Excel 2013