2016-11-23 52 views
0

我在使用ADO尝试更改已关闭的Excel工作簿中的数字。我发现下面的代码是由L42在2015年编写的。但程序会停止,并显示错误“没有给出一个或多个必需参数的值”。我找不到丢失的东西!通过ADO写入/更新数据以关闭Excel工作簿

Sub ChangeNum() 
Dim con As ADODB.Connection, rec As ADODB.Recordset 
Dim sqlstr As String, datasource As String 
    Set con = New ADODB.Connection: Set rec = New ADODB.Recordset 
    datasource = "D:\DropBox\TraderShare\TraderNum.xlsx" 
Dim sconnect As String 
    sconnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _ 
      "Data Source=" & datasource & ";" & _ 
      "Extended Properties=""Excel 12.0 Xml;HDR=YES"";" 
    con.Open sconnect 
    sqlstr = "UPDATE [Sheet1$] SET [Number] = ""16900"" WHERE [ID] = INum" 
    rec.Open sqlstr, con, adOpenUnspecified, adLockUnspecified 'adLockOptimistic , adOpenStatic, adLockReadOnly 
    con.Close 
    Set rec = Nothing: Set con = Nothing 
End Sub 

感谢您的帮助!

回答

0

此错误的常见原因是缺少或拼写错误的值。我会专门查看SQL语句并查看最新数据

+0

是的,道格,这正是我所要求的。但是我对SQL和ADO知之甚少,之所以我在寻求帮助!正如你所看到的,有几行代码,拼写当然是我先检查的。这个错误是在“rec.Open sqlstr,con,adOpenUnspecified,adLockUnspecified”触发的。我找不到任何更多**必需的**参数用于Open语句。 –

1

我找到了错误! sqlstr应该写成:

sqlstr = "UPDATE [Sheet1$] SET [Number] = ""16900"" WHERE [ID] = ""INum""" 

这是感叹号!我不知道为什么要这样做,如果需要惊叹号连接字符串的不同部分。但他们看起来没有顺序,最后有一个太多了!

+0

感叹号会有所作为...但您的意思是引号,这可能会带来更多的不同。好的工作回答你自己的问题。 – CWilson

相关问题