无法使用ADO在Excel工作表上查询动态命名范围

时间:2014-02-03 22:28:21

标签: excel vba excel-vba ado jet

假设我有一个名为Adjustments的Excel工作表存储在一个名为wksName的变量中,并且在该工作表上,如果您查看名称管理器,我的命名范围定义如下:

tblData =OFFSET(Adjustments!$A$1,0,0,COUNTA(Adjustments!$A:$A),4)

因此,它扩展到与A列到D列中的数据一样多的行。

现在我的VBA模块中有以下代码:

Set ExcelCon = CreateObject("ADODB.Connection")
Set ExcelRecSet = CreateObject("ADODB.Recordset")

ExcelCon.ConnectionString = "Provider='Microsoft.Jet.OLEDB.4.0';" & _
                            "Data Source='" & ThisWorkbook.FullName & "';" & _
                            "Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'"

'Get the data for the update:
ExcelCon.Open

' Get the data from the spreadhseet for the update statement
Set ExcelRecSet = ExcelCon.Execute("SELECT * FROM [" & wksName & "$tblData]")

当我尝试运行此代码时,我收到错误:

Run-time error '-2147217865 (80040e37)':
The Microsoft Jet database engine could not find the object 'Sheet1$tblData'.
Make sure the object exists and that you spell its name and the path name correctly.

这是否是使用ADO的限制 - 无法动态定义命名范围 - 或者有没有办法可以让它工作?

谢谢!

1 个答案:

答案 0 :(得分:0)

正如评论中所述,最终为我工作的代码(对于那些可能会发现您有相同问题的人)的代码如下:

Set ExcelRecSet = ExcelCon.Execute("SELECT * FROM [" & wksName & "$" & _
                                    wks.Range("tblData").Address(0, 0) & "]")

这绝对有效,但如果有办法选择变量范围而不必像上面那样引用它,我很乐意看到这样做的方法。

谢谢!