我在这里向您寻求帮助,因为在对ADO进行了各种试验之后,我有一个无法解决的问题。
我相信我做的每件事都是正确的,但是VBA通知我在转换教育中犯了语法错误
我检查得很好,没有注意到错误,这也是因为同样的查询在Access上执行得很好。
这样做的目的是让查询返回以下结果:

如果我在没有连接的情况下运行一个非常类似的查询,我没有任何问题,一切都正常,但是如果我在工作表"months“上使用连接,语法问题就会出现。
你能指出我哪里错了吗?
非常感谢您的支持。
这里是文件:https://www.dropbox.com/s/2isoyahnsmvcr2k/Errore_TRANSFORM.xlsb?dl=0
下面是我的代码:
Sub generaRicavi()
Dim RS As New ADODB.Recordset
Dim conn As String, SQL As String
Application.ScreenUpdating = False
conn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & "; Jet OLEDB:Bypass ChoiceField Validation =True;Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1'"
SQL = "TRANSFORM Sum(Foglio1$.RICAVI)" _
& " SELECT Year([Foglio1$].[DATA])" _
& " FROM MESI$ LEFT JOIN Foglio1$ ON MESI$.MESE = Month([Foglio1$].[DATA])" _
& " GROUP BY Year([Foglio1$].[DATA])" _
& " ORDER BY Year([Foglio1$].[DATA]), MESI$.MESE" _
& " PIVOT MESI$.MESE;"
RS.Open SQL, conn, adOpenStatic, adLockReadOnly
With Foglio2
.Range("A3").CurrentRegion.ClearContents
.Range("A3:M3") = Array("ANNO","GENNAIO", "FEBBRAIO", "MARZO", "APRILE", "MAGGIO", "GIUGNO", "LUGLIO", "AGOSTO", "SETTEMBRE", "OTTOBRE", "NOVEMBRE", "DICEMBRE")
.Range("A4").CopyFromRecordset RS
End With
RS.Close
Application.ScreenUpdating = True
Set RS = Nothing
End Sub发布于 2021-11-11 18:16:52
我找到了解决方案。实际上,查询中存在语法错误。缺少工作表和表字段之间的方括号。可以工作的代码如下:
Sub generaRicavi()
Dim RS As New ADODB.Recordset
Dim conn As String, SQL As String
Application.ScreenUpdating = False
conn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & "; Jet OLEDB:Bypass ChoiceField Validation =True;Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1'"
SQL = "TRANSFORM Sum(Foglio1$.RICAVI)" _
& " SELECT Year([Foglio1$].[DATA])" _
& " FROM [MESI$] LEFT JOIN [Foglio1$] ON [MESI$].[MESE] = Month([Foglio1$].[DATA])" _
& " GROUP BY Year([Foglio1$].[DATA])" _
& " ORDER BY Year([Foglio1$].[DATA]), [MESI$].[MESE]" _
& " PIVOT [MESI$].[MESE];"
RS.Open SQL, conn, adOpenStatic, adLockReadOnly
With Foglio2
.Range("A3").CurrentRegion.ClearContents
.Range("A3:M3") = Array("ANNO", "GENNAIO", "FEBBRAIO", "MARZO", "APRILE", "MAGGIO", "GIUGNO", "LUGLIO", "AGOSTO", "SETTEMBRE", "OTTOBRE", "NOVEMBRE", "DICEMBRE")
.Range("A4").CopyFromRecordset RS
End With
RS.Close
Application.ScreenUpdating = True
Set RS = Nothing
End Subhttps://stackoverflow.com/questions/69830677
复制相似问题