在excelvba macos中由querytable创建的范围名称

c3frrgcw  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(353)

我正在excel for mac 2016中运行一个querytable,目标区域为'data\u value',电子表格'hs'中单元格a1的名称,querytable将名称'externaldata\u 1'分配给同一单元格a1提取数据后,我想删除名称'externaldata\u 1',以便我可以引用脚本末尾'data\u 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 .

46qrfjad

46qrfjad1#

只要去掉那条线。删除每个查询表时,已经删除了其命名范围。因此,你的电话 Worksheets("hs").Names("ExternalData_1").Delete 是多余的,并且由于名称对象不存在而将出错。如果将函数 Package 为正确的错误处理,则会引发以下错误:
应用程序定义或对象定义错误
要测试,请运行 Name 距离循环就在你的后面 QueryTables 循环。从下面,您将看到只有一个“externaldata\u 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

或者,您可以在ribbon>formulas>name manager(在defined names部分下)下(在mac上可能有所不同)运行代码后不带上一行进行检查,并查看未列出的“externaldata\u 1”。

相关问题