更新 MS - 通过 MS-Excel 单元格访问字段
Posted
技术标签:
【中文标题】更新 MS - 通过 MS-Excel 单元格访问字段【英文标题】:Updating MS - Access fields through MS-Excel cells 【发布时间】:2011-02-15 09:54:24 【问题描述】:假设我有一个 Excel 工作簿和一个 Access 表,它们不一定具有相似的结构(即它们的列数可能不同)。
当我打开工作簿时,Excel 工作表中的行由 Access 表中的行填充(从 Access 表复制到 Excel 工作表使用宏指定的特定单元格范围)。
然后我修改 Excel 工作表中的某些单元格。
我在 Excel 工作表中还有一个名为“保存”的按钮。按下时,这将执行一个宏。
我的问题:当单击“保存”按钮时,如何更新 Access 表以反映 Excel 工作表中的更改?
【问题讨论】:
【参考方案1】:您可以使用 ADO 和一些代码。
这里有一些注释。
假设你得到一些像这样的数据:
Sub GetMDB()
Dim cn As Object
Dim rs As Object
strFile = "C:\Docs\DBFrom.mdb"
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFile & ";"
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
cn.Open strCon
strSQL = "SELECT * FROM Table1"
rs.Open strSQL, cn
With Worksheets(7)
For i = 0 To rs.Fields.Count - 1
.Cells(1, i + 1) = rs.Fields(i).Name
Next
rs.MoveFirst
.Cells(2, 1).CopyFromRecordset rs
End With
End Sub
您可以像这样使用 ADO 更新数据:
Sub UpdateMDB()
Dim cn As Object
Dim rs As Object
''It wuld probably be better to use the proper name, but this is
''convenient for notes
strFile = Workbooks(1).FullName
''Note HDR=Yes, so you can use the names in the first row of the set
''to refer to columns
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFile _
& ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
cn.Open strCon
''Selecting the cell that are different
strSQL = "SELECT * FROM [Sheet7$] s " _
& "INNER JOIN [;Database=c:\Docs\DBFrom.mdb;].Table1 t " _
& "ON s.id=t.id " _
& "WHERE s.Field1<>t.Field1"
rs.Open strSQL, cn, 1, 3 ''adOpenKeyset, adLockOptimistic
''Just to see
''If Not rs.EOF Then MsgBox rs.GetString
''Editing one by one (slow)
rs.MoveFirst
Do While Not rs.EOF
rs.Fields("t.Field1") = rs.Fields("s.Field1")
rs.Update
rs.MoveNext
Loop
''Batch update (faster)
strSQL = "UPDATE [;Database=c:\Docs\DBFrom.mdb;].Table1 t " _
& "INNER JOIN [Sheet7$] s " _
& "ON s.id=t.id " _
& "SET t.Field1=s.Field1 " _
& "WHERE s.Field1<>t.Field1 "
cn.Execute strSQL
End Sub
【讨论】:
我还在学习VBA..你能建议一个地方我可以找到一些“种子”代码来启动这个过程吗...? 谢谢你,雷穆...!!我会试试这个,然后回到你身边......!感谢您的宝贵时间...! Hi Remou... 有一点疑问.... 我的数据库路径是 Database=C:\Documents and Settings\staff\Desktop\Excel Insert Issue\table.accdb.... 什么在 [;Database=c:\Docs\DBFrom.mdb;]... 中替换它的正确语法是什么?而且.. 我在 'rs.Open strSQL, cn, 1, 3 ''adOpenKeyset, adLockOptimistic' 行上收到错误 'No value given for a or more required parameters' 您将使用:[;Database=C:\Documents and Settings\staff\Desktop\Excel Insert Issue\table.accdb;] 但是,对于 ACCDB,您将需要不同的连接字符串。见connectionstrings.com/access-2007至于问题,很可能是你的SQL字符串有问题,请贴出来。 sql 字符串为 strSQL = "SELECT * FROM [Sheet2$] s " _ & "INNER JOIN [;Database=C:\Documents and Settings\staff\My Documents\table.mdb;] .August t " _ & "ON s.id=t.id " _ & "WHERE s.Field1t.Field1"以上是关于更新 MS - 通过 MS-Excel 单元格访问字段的主要内容,如果未能解决你的问题,请参考以下文章
允许 s-s-rS 表格单元格溢出到下一个单元格(ala Excel)