2010-05-04 7 views
3

Considérez que j'ai un classeur Excel et une table Access n'ayant pas nécessairement une structure similaire (c'est-à-dire qu'ils n'ont pas nécessairement le même nombre de colonnes).Mise à jour des zones MS-Access via des cellules MS-Excel

Lorsque j'ouvre le classeur, les lignes de la feuille Excel sont remplies par les lignes de la table Access (copiées de la table Access dans la plage de cellules particulière de la feuille Excel spécifiée à l'aide de macros).

Ensuite, je modifie certaines cellules dans la feuille Excel.

J'ai aussi un bouton appelé "Enregistrer" dans la feuille Excel. Lorsque vous appuyez sur, cela va exécuter une macro.

Ma question: comment puis-je mettre à jour la table Access pour refléter les changements dans la feuille Excel lorsque l'on clique sur le bouton "Enregistrer"?

Répondre

6

Vous pouvez utiliser ADO et du code.

Voici quelques notes.

Disons que vous obtenez des données comme ceci:

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 

Vous pouvez mettre à jour les données en utilisant ADO comme ceci:

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

Je suis toujours dans le processus d'apprentissage VBA .. peut Suggère un endroit où je peux trouver un code "seed" pour démarrer le processus ...? – SpikETidE

+0

J'ai ajouté quelques notes. – Fionnuala

+0

Merci, Remou ... !! Je vais essayer ça et revenir à vous ...! Merci pour votre temps...! – SpikETidE