ich arbeite mit einer Accessdatei, die ca. 20.000 Datensätze umfasst.
Diese Datenbank mit einem beispielhaften Ausschnitt ist in Tabellenblatt Datenbasis der Testdatei hinterlegt:
https://www.herber.de/bbs/user/109028.xlsm
Eindeutig zuzuordnen sind diese Datensätze über die ID, welche als Identifikationsnummer für den jeweiligen Kontakt dient.
Nun wird diese Datenbasis regelmäßig exportiert und im Zuge unterschiedlicher Excel-Arbeitsdateien verwendet und auch modifiziert.
Eines von vielen Anwendungsbeispielen wäre z.B. eine Außendienstliste (Tab Beispiel1).
Der zuständige Außendienstmitarbeiter hätte die Aufgabe seinen Zuständigkeitsbereich im Hinblick auf die Besuchszeiten der Kunden zu bearbeiten, die Spalten B und C als nicht in der Datenbasis befindliche Informationen wären also der Bearbeitungsfokus.
Im Zuge der Bearbeitung würden aber dennoch vereinzelt Stammdatenänderung vorgenommen (z.B. aus dem Gespräch resultierend Änderungen der Anschrift oder Telefonnummer), die für die "Datenbasis" relevant sind.
Diese Informationen würden dann von mir nach abgeschlossener AD-Recherche via Import wieder in die Datenbasis eingespielt.
Ich habe das bisher immer mit einem Sverweis auf die ID-Spalte gemacht, was aber einen enormen manuellen Aufwand bedeutet und im Hinblick auf die Größe der Datenbasis außerdem fehleranfällig ist.
Zu schnell ist mal ein falscher Datensatz überschrieben, was leider oft erst viel später auffällt, wenn es zu spät ist.
Ich suche nun nach einer Möglichkeit, Arbeitstabellen wie Beispiel1 mit einem Makro direkt in die Datenbasis einspielbar zu machen.
Diese Routine würde dann also einen Bezug beider Datensätze mit der ID-Spalte herstellen und die Datensätze der modifizierten Stammdatenspalten in die Datenbasis einspielen.
Hierbei würden sowohl geänderte Datenfelder übernommen, als auch unveränderte Datenfelder im Originalzustand belassen.
Einheitliches Merkmal ist, wie gesagt, die ID - weiterhin würden die Spaltenüberschriften der Datenbasis auch in den Arbeitstabellenblättern zu finden sein, das ermöglicht ggf. einen zusätzlichen Bezug.
Vor ein paar Wochen wurde mir im Hinblick auf die Problemstellung von Rudi in diesem Forum mit dem nachfolgenden Makro bereits sehr geholfen:
Sub UpdateDatenBasis()
Dim arrADMA, i As Long, j As Long, wksDB As Worksheet
Dim vntRow As Long, vntCol As Long
Application.ScreenUpdating = False
Set wksDB = Worksheets("Datenbasis")
If Not ActiveSheet Is wksDB Then
arrADMA = Cells(1, 1).CurrentRegion
For i = 2 To UBound(arrADMA)
vntRow = Application.Match(arrADMA(i, 1), wksDB.Columns(2), 0)
If Not IsError(vntRow) Then
For j = 4 To UBound(arrADMA, 2)
vntCol = Application.Match(arrADMA(1, j), wksDB.Rows(1), 0)
If Not IsError(vntCol) Then
wksDB.Cells(vntRow, vntCol) = arrADMA(i, j)
End If
Next j
End If
Next i
End If
End Sub
Wie sich erst im Nachhinein herausgestellt hat, läuft das Makro aber dann auf einen Laufzeitfehler, wenn die Arbeitsdatei anders aufgebaut ist, oder weitere, mit Datenbasis übereinstimmende Spaltenüberschriften aufweist, als exemplarisch im Tabellenblatt Beispiel 1.Das kommt ziemlich häufig vor, die Anordnung mit den kongruenten Spalten Adresse, PLZ, Ort, Telefon in dieser Anordnung und Auswahl ist wie gesagt nur ein mögliches Beispiel.
Idealerweise arbeitet das Makro so ab, dass die Zelleninhalte unter den mit der mit der Datenbasis kongruenten Spaltenüberschriften in Beispiel 1 unabhängig von der Anordnung und Auswahl identifiziert und in der Datenbasis ersetzt werden.
Ist das möglich, oder ist diese Funktionalität nicht automatisiert über ein Makro abbildbar?
Nochmals vielen Dank und viele Grüße
Nils