假设我有一个名为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的限制 - 无法动态定义命名范围 - 或者有没有办法可以让它工作?
谢谢!
答案 0 :(得分:0)
正如评论中所述,最终为我工作的代码(对于那些可能会发现您有相同问题的人)的代码如下:
Set ExcelRecSet = ExcelCon.Execute("SELECT * FROM [" & wksName & "$" & _
wks.Range("tblData").Address(0, 0) & "]")
这绝对有效,但如果有办法选择变量范围而不必像上面那样引用它,我很乐意看到这样做的方法。
谢谢!