Excel VBA macos 中 QueryTable 创建的范围名称
Range name created by QueryTable in Excel VBA macos
我是 运行 Excel 中 Mac 2016 年的 QueryTable,目标范围 'data_value',电子表格中单元格 A1 的名称 'hs', QueryTable 在提取数据后将名称 'ExternalData_1' 分配给同一个单元格 A1,我想删除名称 'ExternalData_1' 以便我可以在脚本末尾引用 'data_value' 中的值但是可以't.
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
.
中停止 运行
只需删除该行即可。当您删除每个 QueryTable 时,您已经删除了它的命名范围。因此,您的调用 Worksheets("hs").Names("ExternalData_1").Delete
是多余的,并且会出错,因为 Name 对象不存在。如果您将函数包装在适当的错误处理中,错误将引发:
Application-defined or Object-defined error
为了测试,运行 一个 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" 未列出。
我是 运行 Excel 中 Mac 2016 年的 QueryTable,目标范围 'data_value',电子表格中单元格 A1 的名称 'hs', QueryTable 在提取数据后将名称 'ExternalData_1' 分配给同一个单元格 A1,我想删除名称 'ExternalData_1' 以便我可以在脚本末尾引用 'data_value' 中的值但是可以't.
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
.
只需删除该行即可。当您删除每个 QueryTable 时,您已经删除了它的命名范围。因此,您的调用 Worksheets("hs").Names("ExternalData_1").Delete
是多余的,并且会出错,因为 Name 对象不存在。如果您将函数包装在适当的错误处理中,错误将引发:
Application-defined or Object-defined error
为了测试,运行 一个 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" 未列出。