2016-07-19 20 views
0

Ich habe ein Excel-Arbeitsbuch. Momentan sind 2 Blätter vorhanden. 1 Blatt sendet Zeilen an eine Access DB, die andere Registerkarte zeigt alle Zeilen aus diesem DB. Ich möchte in der Lage sein, die DB entsprechend Änderungen in diesem letzten Blatt zu aktualisieren.Verfolgen Sie Änderungen und aktualisieren Sie sie in Datenbank

Ich habe etwas gegraben und eine Option zum Verfolgen von Änderungen gesehen, indem ich es zu einer freigegebenen Arbeitsmappe mache und die integrierte Funktion zum Verfolgen von Änderungen aktiviert habe. Ich möchte die Arbeitsmappe nur in der Lage sein, durch 1 Benutzer gleichzeitig zu bearbeiten. (Andere Benutzer erhalten sonst möglicherweise nicht die letzten Zeilen.)

Das Aktualisieren des gesamten Arbeitsblatts ist keine Option, da Zellen bearbeitet werden können, ohne es zu merken. Ich dachte daran, nur eine bestimmte Spalte zu aktualisieren, aber das Problem bleibt gleich, nur kleiner.

Mein positivstes Szenario wäre, dass Excel die Änderungen verfolgen würde, nur diese aktualisieren und vielleicht sogar die Änderungen hervorheben würde, bevor sie an die Datenbank gesendet werden.

Ist dies eine Möglichkeit in VBA zu tun?

+0

Ich würde entweder das Arbeitsblatt mit der Datenbank als eine verknüpfte Tabelle hinzufügen oder verwenden Sie das 'Worksheet_Change (ByVal Target As Range)' Ereignis die Datenbank mit einer ADO-Abfrage zu aktualisieren. –

+0

Wenn dies Ihnen geholfen hat, markieren Sie bitte als gelöst. – KyloRen

Antwort

1

Mein Ansatz für so etwas wäre ein Ereignis ausgelöst werden jedes Mal, wenn Sie Daten ändern. Dann müssen diese Daten in die Datenbank eingefügt werden. Wenn sich die Datenbank lokal befindet, ist die Leistung kein Problem.

Etwas wie unten, müssten Sie den Bereich zu Ihrem anpassen und auch mit verschiedenen Datentypen über einige if Aussagen zu tun haben. Dies ist nur ein Beispielcode, da ich keine Ahnung habe, welche Art von Daten Sie zu aktualisieren versuchen, und es behandelt nur zwei Datentypen.

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim strSQL As String 

     If Not Intersect(Target, Range("A1:Z100")) Is Nothing Then 
      If IsNumeric(Target.Value) Then 
       strSQL = "INSERT INTO MyTable (Field_1) VALUES (" & Target.Value & ")" 
      Else 
       strSQL = "INSERT INTO MyTable (Field_1) VALUES ('" & Target.Value & "')" 
      End If 
     End If 


End Sub 
Verwandte Themen