如何在ADO的Excel中使用sql / VBA创buildTABLE

我试图擦除表格内容,并将其replace为Excel表格中的新内容。

代码不会引发任何错误,但是每次运行它时, 都会在源表之前插入一些空白单元格

'base.xlsx'表格如下所示:

基础

如果在运行代码之前target.xlsx是无效的,我得到我想要的,但是如果我再次运行我得到这个:

目标

这里是代码:

Sub SQLQUERY() Dim Cn As ADODB.Connection Dim QUERY_SQL As String Dim ExcelCn As ADODB.Connection SourcePath = "C:\Path\to\base.xlsx" TargetPath = "C:\Path\to\target.xlsx" CHAINE_HDR = "[Excel 12.0;Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Extended Properties='HDR=YES;'] " Set Cn = New ADODB.Connection STRCONNECTION = _ "Provider=Microsoft.ACE.OLEDB.12.0;" & _ "Data Source='" & SourcePath & "';" & _ "Mode=Read;" & _ "Extended Properties=""Excel 12.0;"";" Colonnes = "[Col#1], Col2" QUERY_SQL = _ "SELECT " & Colonnes & " FROM [base$] " & _ "IN '" & SourcePath & "' " & CHAINE_HDR MsgBox (QUERY_SQL) Cn.Open STRCONNECTION Set ExcelCn = New ADODB.Connection ExcelCn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _ "Data Source=" & TargetPath & ";" & _ "Extended Properties=""Excel 12.0;HDR=YES;""" ExcelCn.Execute "DROP TABLE [sheet$]" ExcelCn.Execute "CREATE TABLE [sheet$] ([C1] Float, [C2] Float, [C3] Float)" Cn.Execute "INSERT INTO [sheet$] (C1, C3) IN '" & TargetPath & "' 'Excel 12.0;' " & QUERY_SQL '--- Fermeture connexion --- Cn.Close ExcelCn.Close End Sub 

经过一番研究,我发现代码里发生了什么事情。 执行Drop Table ,Excel保持“活动范围”,因此INSERT INTO将在活动范围之后插入数据。

为了解决这个问题,我们需要用表名来指定一个范围:

 ExcelCn.Execute "DROP TABLE [sheet$]" ExcelCn.Execute "CREATE TABLE [sheet$] ([C1] Float, [C2] Float, [C3] Float)" Cn.Execute "INSERT INTO [sheet$A1:ZZ1] (C1, C3) IN '" & TargetPath & "' 'Excel 12.0;' " & QUERY_SQL '--- Fermeture connexion --- 

请注意sql语句中的[工作表$ A1:ZZ1]