【发布时间】:2017-10-06 22:41:54
【问题描述】:
我正在开发 Excel 2010 Workboox,其中宏从数据库表中提取数据。然后,如果需要,用户可以将 Column06) 的值更新为特定值。完成后,他们可以运行一个宏来运行 SQL 更新,以便在数据库表中 COLUMN01 和 COLUMN02 所在的位置更新数据库中的 Column06。我知道 ADO 连接正在工作,因为我尝试了一个非常通用的 sql,它运行良好。我知道表格可能有不同的长度,所以我知道我可能需要遍历行,这就是我卡住的地方。
我尝试设置一个类似于我在网上找到的另一个解决方案的循环,并开始收到运行时错误 91“对象变量或未设置块变量”。我认为是由于我在新的更新语句中使用的 ListObject.ListColumns。我尝试使用其他示例来声明这些,但通常会导致其他错误。我一定是错过了什么,或者做错了什么。任何帮助将不胜感激。
Sub Updatetbl_data()
'
' Updatetbl_data Macro
' test
Sheets("Sheet2").Select
Dim cnn As ADODB.Connection
Dim uSQL As String
Set cnn = New Connection
cnnstr = "Provider=SQLOLEDB; " & _
"Data Source=MySource; " & _
"Initial Catalog=MyDB;" & _
"User ID=ID;" & _
"Password=Pass;" & _
"Trusted_Connection=No"
cnn.Open cnnstr
' New Update Statement idea based on possible solution found online
Dim row As Range
For Each row In [tbl_data].Rows
uSQL = "UPDATE tbl_data SET Column06 = '" & (row.Columns (row.ListObject.ListColumns("Column06").Index).Value) & _
"' WHERE Column01 = '" & (row.Columns(row.ListObject.ListColumns ("Column01").Index).Value) & _
"' AND Column02 = '" & (row.Columns(row.ListObject.ListColumns("Column02").Index).Value) & "' "
'Debug.Print (uSQL)
cnn.Execute uSQL
Next
cnn.Close
Set cnn = Nothing
Exit Sub
'
End Sub
【问题讨论】:
标签: vba excel sql-update ado