我试图找到解决我的问题的方法,也查看了这里报告的过去的问题,但我没有找到解决方案。
问题:在 VBA 中,如果我只知道表的名称(而不知道其地址范围),如何在 ADODB 查询中指定 Excel 表的名称?
我必须查询给定命名表(“Table_1A”)的一些数据,这些数据存储在保存在我的电脑的资源数据目录/文件夹中的另一个关闭工作簿的给定工作表(名为“1A”)中。
ADODB 似乎无法连接到指定的表(表对 ADODB 来说似乎是不可见的)。
注意:经典的“手工制作”表(ListObject),第一列包含一组材料,其他列包含材料的物理特性与温度的关系(温度值标识列名称)。没有创建数据透视表或其他表来查询数据库。
仅当我指定工作表名称加上表的地址范围时,才可以连接到表。如果我只指定表的名称...它不存在!
问题在于,要查询的表的地址范围,可能会随着时间的推移而改变(表存储和更新的sheet名称,不会随时间改变)。
提前感谢您的帮助。
安
你可以这样做;
假设您有一个封闭的工作簿(“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 = 无 结束子