更新 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)

asp导出excel源码

关于PHP导出Excel文件的单元格格式问题

通过双击突出显示 MS excel 2007 中的单元格

Java-怎么才能用Poi打开已有的excel文件,然后追加一些单元格阿?

更新访问查询中的空白单元格