2010-05-04 26 views
3

請考慮我有一個Excel工作簿和一個Access表,它們不一定具有相似的結構(即它們可能沒有相同的列數)。更新MS - 通過MS-Excel單元訪問字段

當我打開工作簿時,Excel工作表中的行將被Access表中的行填充(從Access表複製到Excel工作表使用宏指定的特定單元格範圍內)。

然後我修改Excel工作表中的某些單元格。

我在Excel工作表中也有一個叫做「保存」的按鈕。當按下時,這將執行一個宏。

我的問題:當點擊「保存」按鈕時,如何更新Access表以反映Excel工作表中的更改?

回答

6

您可以使用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 
+0

我仍然在學習VBA的過程..可以üPLZ建議一個地方,我可以找到一些「種子」代碼來啓動過程...? – SpikETidE 2010-05-04 11:13:01

+0

我已經添加了一些註釋。 – Fionnuala 2010-05-04 12:18:01

+0

謝謝,Remou ...... !!我會試試這個,然後回到你身邊......!謝謝你的時間...! – SpikETidE 2010-05-04 12:23:00