|
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
本帖最后由 rhzwan123 于 2019-3-14 08:22 编辑
现有三个excel工作表,分别为,
1、当前工作簿为 D:\N.xls
2、要查询文件的1 D:\1.xls
2、要查询文件的2 D:\2.xls
【已知】
当前excel版本为2010,而且
1.xls的sheet1的[A1:C3]内容为
|张三|男|36|
|李四|男|35|
|赵一|女|25|
2.xls的sheet1的[A1:C3]内容为
|胡六|男|37|
|季七|男|45|
|丁十|女|35|
【要求】利用SQL方法,把1.xls的sheet1的[a1:c3]、2.xls的sheet1的[a1:c3],通过Union查询,存放到当前工作簿中,(vba代码在D:\N.xls中)
【代码如下】- Option Explicit
- Sub Test()
- Dim Cnn As Object, Rst As Object
- Dim strCnn$, strSQL$, FilePath1$, FilePath2$
- FilePath1$ = ThisWorkbook.Path & "\1.xls"
- FilePath2$ = ThisWorkbook.Path & "\2.xls"
- Set Cnn = CreateObject("adodb.connection")
- Set Rst = CreateObject("adodb.recordset")
- strCnn = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0;HDR=NO;IMEX=1';Data source=" & ThisWorkbook.FullName
- Cnn.Open strCnn
- strSQL = "select * from [" & FilePath1 & "].[sheet1$A1:c3] Union All select * from [" & FilePath2 & "].[sheet1$A1:c3]"
- Set Rst = Cnn.Execute(strSQL)
- With Sheets("sheet1")
- .Range("a1").CurrentRegion.ClearContents
- .Range("A1").CopyFromRecordset Rst
- End With
- Rst.Close
- Cnn.Close
- Set Rst = Nothing
- Set Cnn = Nothing
- End Sub
复制代码
【结果如下】
【问题】
跨工作簿查询时,如果被查询的工作表无表头,即使设置HDR=NO,第一行数据仍然会被视为表头而忽略。这个问题出在哪里,怎么解决?
【扩展问题】
如果把
strCnn = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0;HDR=NO;IMEX=1';Data source=" & ThisWorkbook.FullName
中的数据源改为data source=Filepath1
结果也是一样。
|
|