Excel/Vba/ADODB:如何仅使用其名称连接到表(ListObject)以执行查询?

问题描述 投票:0回答:1

我试图找到解决我的问题的方法,也查看了这里报告的过去的问题,但我没有找到解决方案。

问题:在 VBA 中,如果我只知道表的名称(而不知道其地址范围),如何在 ADODB 查询中指定 Excel 表的名称?

我必须查询给定命名表(“Table_1A”)的一些数据,这些数据存储在保存在我的电脑的资源数据目录/文件夹中的另一个关闭工作簿的给定工作表(名为“1A”)中。

ADODB 似乎无法连接到指定的表(表对 ADODB 来说似乎是不可见的)。

注意:经典的“手工制作”表(ListObject),第一列包含一组材料,其他列包含材料的物理特性与温度的关系(温度值标识列名称)。没有创建数据透视表或其他表来查询数据库。

仅当我指定工作表名称加上表的地址范围时,才可以连接到表。如果我只指定表的名称...它不存在!

问题在于,要查询的表的地址范围,可能会随着时间的推移而改变(表存储和更新的sheet名称,不会随时间改变)。

提前感谢您的帮助。

excel vba adodb
1个回答
0
投票

你可以这样做;

  • 假设您有一个封闭的工作簿(“Employee.xlsx”),其中名为“Sheet1”的工作表包含一个名为“Table_1A”的“ListObject”,其中 3 列标记为“名字”、“姓氏”和“地址”。 ListObject 位于上述工作表上的 F1:H22 范围内(注意,数据范围可以是其他任何内容,这不会在宏中硬编码

  • 现在,在另一个工作簿上说“Book1.xlsm”,我们有下面的小宏,它将连接到关闭的工作簿并检索名为“Table_1A”的 ListObject 中的所有数据

  • 假设2个工作簿位于同一文件夹中,当宏被触发时,数据将从单元格A2开始写入活动工作表上。

子测试()
    Dim adoCN 作为对象,RS 作为对象
    将 myFile 调暗为字符串,将 strSQL 调暗为字符串
    
    范围(“A2:C”&Rows.Count)=空
    myFile = ThisWorkbook.Path & Application.PathSeparator & "Employee.xlsx"
    
    设置 adoCN = CreateObject("ADODB.Connection")
    设置 RS = CreateObject("ADODB.Recordset")
    
    adoCN.Provider = "Microsoft.ACE.OLEDB.12.0"
    adoCN.Properties("数据源") = myFile
    adoCN.Properties("扩展属性") = "Excel 12.0 宏;HDR=是;IMEX=1"
    adoCN.Open
    
    strArg = "工作表(""Sheet1"").ListObjects(""Table_1A"").Range.Address(0, 0)"
    
    strSQL =“从[Sheet1$”中选择*&atrArg&“]”
    
    RS.Open strSQL、adoCN
    
    范围(“A2”).CopyFromRecordset RS
        
    设置 RS = 无
    设置 adoCN = 无
结束子
© www.soinside.com 2019 - 2024. All rights reserved.