我不明白为什么在尝试删除命名范围时,我一直收到“运行时错误'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
答案 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