2

我是 VBA 新手。现在,我想使用临时表创建可编辑的交叉表。当我想根据编辑的数据更新规范化表时遇到问题。当我运行我的代码时,我收到此错误,错误 3061:参数太少。预期 2.有人可以帮我检查我的代码吗?提前致谢

Public Sub Normalize()
Dim rs As DAO.Recordset
On Error GoTo EH

'delete existing data from temp table
CurrentDb.Execute "DELETE * FROM tblNormalize;", dbFailOnError + dbSeeChanges

'get a recordset of the column headers
Set rs = CurrentDb.OpenRecordset("SELECT DISTINCT newvalue FROM Table1;")
Debug.Print
rs.MoveFirst
Do While rs.EOF = False

' "un" crosstab the data from crosstab table into Normalize table
CurrentDb.Execute "INSERT INTO tblNormalize (product, spec, descr,newvalue, Rate )" &  Chr(10) & _
"SELECT product,spec,descr, " & rs.Fields("newvalue") & ", [" & rs.Fields("newvalue") & "]" & Chr(10) & _
"FROM tblCrosstab;", dbFailOnError + dbSeeChanges

Debug.Print rs.Fields("newvalue")
rs.MoveNext
Loop
rs.Close
Set rs = Nothing

'update the original normalized dataset

CurrentDb.Execute "UPDATE tblNormalize INNER JOIN Table1 t1 ON (tblNormalize.newvalue = t1.newvalue) " & _
" AND (tblNormalize.product = t1.product) AND (tblNormalize.spec = t1.spec) " & _
" AND (tblNormalize.descr = t1.descr)" & _
" SET Table1.Rate = tblNormalize.Rate;", dbFailOnError + dbSeeChanges


Exit Sub

EH:
MsgBox "Error " & Err.Number & ": " & Err.Description, vbOKOnly, "Error"

End Sub
4

1 回答 1

1

你正在为自己创造一个受伤的世界。除此之外,这个:

"INSERT INTO tblNormalize (product, spec, descr,newvalue, Rate )" &  Chr(10) & _
"SELECT product,spec,descr, " & rs.Fields("newvalue") & ", [" & rs.Fields("newvalue") & "]" & Chr(10) & _
"FROM tblCrosstab;"

一切都会出错。

尝试:

"INSERT INTO tblNormalize (product, spec, descr,newvalue, Rate )" & _
" SELECT product,spec,descr, " & rs.Fields("newvalue") & ", [" _
& rs.Fields("newvalue") & "] FROM tblCrosstab;"

此外,使用 Debug.Print 将字符串写入即时窗口 (Ctrl+G) 并检查它是否在查询设计窗口中工作。该错误通常是由于缺少字段(列)的拼写错误。

于 2012-05-15T11:03:18.553 回答