vba - 使用 VBA 将 Access 查询复制到 Excel 工作表失败

标签 vba excel ms-access

我的 VBA 代码的一部分将 Access 查询复制到 Excel 表中

MyConn = Worksheets("eingaben").Range("B2").Value
Set cnn = New ADODB.Connection
With cnn
  .Provider = "Microsoft.ACE.OLEDB.12.0"
  .Open MyConn
End With

For i = 0 To 14
'
SSQL = "SELECT * FROM [" & marrSql(i) & "];"

Set cmdCommand = New ADODB.Command
Set cmdCommand.ActiveConnection = cnn
With cmdCommand
    .CommandText = SSQL
End With

Debug.Print marrSql(i)
Set rst = New ADODB.Recordset
'rst.CursorLocation = adUseServer
rst.Open Source:=cmdCommand, CursorType:=AdForwardOnly, LockType:=adLockOptimistic

Workbooks("Cop.xls").Activate


Range(marrPlace(i)).CopyFromRecordset rst
'
Next

一些查询被成功复制但其中一些我收到以下错误:
Run-Time error '-2147217904 (80040e10)': No Value given for one or more required parameters."

enter image description here

我已经检查了所有这些无法复制的查询,第一列是空的。不过,应该没问题吧?!

那是其中之一的查询:
SELECT [Formulare]![Auswahlmaske]![Monat] AS Datum_SU, IIf([CATEGORIE_AFFAIRE]="CAN" Or [CATEGORIE_AFFAIRE]="CAU" Or [CATEGORIE_AFFAIRE]="3WSN" Or [CATEGORIE_AFFAIRE]="3WSU" Or [CATEGORIE_AFFAIRE]="REPA","VAC",IIf([CATEGORIE_AFFAIRE]="KMLN" Or [CATEGORIE_AFFAIRE]="RWLN" Or [CATEGORIE_AFFAIRE]="KMLU" Or [CATEGORIE_AFFAIRE]="RWLU","LLD",[CATEGORIE_AFFAIRE])) AS Produit, Count(K1ltit31.IE_AFFAIRE) AS AnzahlvonIE_AFFAIRE, Sum(IIf([SOLDE_COMPTA]<0,[CRD],[SOLDE_COMPTA]+[CRD])) AS [ENCOURS TOTAL], K1ltit31.CODE_STATUT_COMPTA
FROM K1ltit31
GROUP BY [Formulare]![Auswahlmaske]![Monat], IIf([CATEGORIE_AFFAIRE]="CAN" Or [CATEGORIE_AFFAIRE]="CAU" Or [CATEGORIE_AFFAIRE]="3WSN" Or [CATEGORIE_AFFAIRE]="3WSU" Or [CATEGORIE_AFFAIRE]="REPA","VAC",IIf([CATEGORIE_AFFAIRE]="KMLN" Or [CATEGORIE_AFFAIRE]="RWLN" Or [CATEGORIE_AFFAIRE]="KMLU" Or [CATEGORIE_AFFAIRE]="RWLU","LLD",[CATEGORIE_AFFAIRE])), K1ltit31.CODE_STATUT_COMPTA
HAVING (((IIf([CATEGORIE_AFFAIRE]="CAN" Or [CATEGORIE_AFFAIRE]="CAU" Or [CATEGORIE_AFFAIRE]="3WSN" Or [CATEGORIE_AFFAIRE]="3WSU" Or [CATEGORIE_AFFAIRE]="REPA","VAC",IIf([CATEGORIE_AFFAIRE]="KMLN" Or [CATEGORIE_AFFAIRE]="RWLN" Or [CATEGORIE_AFFAIRE]="KMLU" Or [CATEGORIE_AFFAIRE]="RWLU","LLD",[CATEGORIE_AFFAIRE])))<>"SERA" And (IIf([CATEGORIE_AFFAIRE]="CAN" Or [CATEGORIE_AFFAIRE]="CAU" Or [CATEGORIE_AFFAIRE]="3WSN" Or [CATEGORIE_AFFAIRE]="3WSU" Or [CATEGORIE_AFFAIRE]="REPA","VAC",IIf([CATEGORIE_AFFAIRE]="KMLN" Or [CATEGORIE_AFFAIRE]="RWLN" Or [CATEGORIE_AFFAIRE]="KMLU" Or [CATEGORIE_AFFAIRE]="RWLU","LLD",[CATEGORIE_AFFAIRE])))<>"SERF") AND ((K1ltit31.CODE_STATUT_COMPTA)="ctx"))
ORDER BY IIf([CATEGORIE_AFFAIRE]="CAN" Or [CATEGORIE_AFFAIRE]="CAU" Or [CATEGORIE_AFFAIRE]="3WSN" Or [CATEGORIE_AFFAIRE]="3WSU" Or [CATEGORIE_AFFAIRE]="REPA","VAC",IIf([CATEGORIE_AFFAIRE]="KMLN" Or [CATEGORIE_AFFAIRE]="RWLN" Or [CATEGORIE_AFFAIRE]="KMLU" Or [CATEGORIE_AFFAIRE]="RWLU","LLD",[CATEGORIE_AFFAIRE])) DESC;

[![在此处输入图像描述][2]][2]

最佳答案

SELECT [Formulare]![Auswahlmaske]![Monat] AS Datum_SU

在 Access 中打开查询时会评估此类参数,但在打开记录集时不会评估。

对于 DAO,我在这里有一个解决方案:https://stackoverflow.com/a/32118340/3820271

对于 ADODB,您可能可以构建类似的东西。
或者使用从表单中读取值的公共(public)函数,并在查询中调用它。

就像是
' This goes into a standard module (not class module)
Public Function GetAuswahlMonat() As Variant
    GetAuswahlMonat = Forms![Auswahlmaske]![Monat]
End Function

接着
SELECT Min(GetAuswahlMonat()) AS Datum_SU, ...
...
GROUP BY IIf( ...

(使用聚合函数而不是分组可能会更好)

关于vba - 使用 VBA 将 Access 查询复制到 Excel 工作表失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39765441/

相关文章:

vba - 如何从Excel VBA的一系列值中返回唯一值

Excel:如果找到则返回特定值

sql - 在 SQL Server 2008 中将数据从浮点类型的 Excel 导入 varchar

excel - VBA 函数未执行

ms-access - 按日期删除数据,其中日期为文本格式 YYYY/MM

t-sql - 在 SQL Server 中转换 MS Access 动态列

excel - 如何在vba中将文本框动态定位在另一个下方

regex - VBA 宏运行时错误

excel - 调整图片宽度和高度

sql - Access 2007 : Querying for DateTime field between two Short Date values