我正在Mac 2016中的Excel中运行QueryTable,目标范围为“ data_value”,电子表格“ hs”中单元格A1的名称,QueryTable在提取数据后将名称“ ExternalData_1”分配给同一单元格A1,我想要删除名称“ ExternalData_1”,以便我可以在脚本末尾引用“ data_value”中的值,但不能。
Function get_data(input_id As String, input_date As String)
Dim sqlstring As String
Dim connstring As String
Dim sLogin As String
sLogin = "DATABASE=[DB];UID=[USER];PWD=[PWD]"
sqlstring = "SELECT data_value FROM tb_data_values WHERE data_date='" & input_date & "'"
connstring = "ODBC;DSN=myodbc;" & sLogin
With
Worksheets("hs").QueryTables.Add(Connection:=connstring, Destination:=Range("data_value"), Sql:=sqlstring)
.FieldNames = False
.BackgroundQuery = False
.Refresh
.RefreshStyle = xlOverwriteCells
End With
get_data = Range("data_value")
Dim qt As QueryTable
For Each qt In Worksheets("hs").QueryTables
qt.Delete
Next qt
Worksheets("hs").Names("ExternalData_1").Delete
Worksheets("hs").Range("data_value").ClearContents
End Function
VBA在第Worksheets("hs").Names("ExternalData_1").Delete
行中停止运行。
答案 0 :(得分:0)
只需删除该行。删除每个QueryTable时,已经删除了它的命名范围。因此,您的呼叫Worksheets("hs").Names("ExternalData_1").Delete
是多余的,并且由于 Name 对象不存在而将出错。如果您将函数包装在正确的错误处理中,则会引发错误:
应用定义错误或对象定义错误
要进行测试,请在Name
循环之后运行一个QueryTables
范围循环。从下面可以看到,只有一个“ ExternalData_1”将与Debug.Print
一起打印。
Dim qt As QueryTable, RngName As Name
For Each qt In Worksheets("hs").QueryTables
Debug.Print qt.Name ' "ExternalData_1" WILL PRINT
qt.Delete
Next qt
For Each RngName In Worksheets("hs").Names
Debug.Print RngName.Name ' "ExternalData_1" WILL NOT PRINT
Next RngName
或者,您可以在功能区>公式>名称管理器(在“已定义的名称”部分下)(上面在Mac上可能有所不同)下,运行上面一行没有代码的代码,然后查看,但未列出““ ExternalData_1”。