y-i*_*guy 4 excel vba excel-vba named-ranges
我不明白为什么我在尝试删除命名范围时不断收到"运行时错误'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
Run Code Online (Sandbox Code Playgroud)
这是用于删除命名范围的"历史"的代码.请注意,它之前的行正好可以找到命名范围.它只是不会删除名称.
Application.Goto Reference:="history"
ActiveWorkbook.Names("history").Delete
Run Code Online (Sandbox Code Playgroud)
答案:问题是工作簿使用工作表名称作为命名范围的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
Run Code Online (Sandbox Code Playgroud)
VBA编辑器中的Locals窗口显示此变量的nameRng.Name是字符串"history!history".
修改后的代码:我删除了Application.Goto Reference:="history"行,因为它本质上是一个非功能性的代码行(类似于Select操作),并留下这个作为删除导入范围名称的代码:
ActiveWorkbook.Names("history!history").Delete
Run Code Online (Sandbox Code Playgroud)
平台:我在Windows 7 Professional上使用Excel 2013