如何在excel中用sql/VBA和ADO创建表格
我正在尝试删除表格内容,并用excel工作表中的新内容替换它 代码不会引发任何错误,但是每次我运行它时,它都会在源表前面插入一些blank单元格 “base.xlsx”表格表如下所示: 如果target.xlsx在运行代码之前无效,我会得到我想要的,但是如果我再次运行它,我会得到以下结果: 代码如下:如何在excel中用sql/VBA和ADO创建表格,sql,excel,vba,ado,Sql,Excel,Vba,Ado,我正在尝试删除表格内容,并用excel工作表中的新内容替换它 代码不会引发任何错误,但是每次我运行它时,它都会在源表前面插入一些blank单元格 “base.xlsx”表格表如下所示: 如果target.xlsx在运行代码之前无效,我会得到我想要的,但是如果我再次运行它,我会得到以下结果: 代码如下: Sub SQLQUERY() Dim Cn As ADODB.Connection Dim QUERY_SQL As String Dim ExcelCn As AD
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
经过一番研究,我发现了代码的情况。当执行
拖放表时,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]