window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-TCJTE9L38H');

Datensätze per VBA kopieren

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Im Artikel Datensätze kopieren haben Sie bereits erfahren, wie Sie Datensätze ohne eine einzige selbstgeschriebene Zeile VBA-Code kopieren können. Der vorliegende Artikel zeigt, wie Sie dies mit VBA erledigen und damit einige Flexibilität gewinnen. Wir stürzen uns dabei zunächst auf die Datensätze, die in einem Unterformular angezeigt werden und schauen uns danach die übrigen Methoden von VBA zum Kopieren von Datensätzen an.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1401_DatensaetzeKopierenVBA.mdb.

Datensätze im Unterformular kopieren

Im Artikel Datensätze kopieren haben wir zuletzt per Schaltflächen-Assistent eine Schaltfläche mit einer Prozedur erstellt, die fünf DoCmd.RunCommand-Befehle mit verschiedenen Parametern aufruft, um den im aktuellen Formular angezeigten Datensatz zu kopieren und als neuen Datensatz in die Tabelle einzufügen.

Eigentlich, so nimmt man naiverweise an, sollte dies doch genau in dieser Form auch funktionieren, wenn wir den Datensatz in einem Unterformular, das seine Daten in der Datenblattansicht anzeigt, kopieren wollen. Wenn wir also ein Hauptformular erstellen und in dieses ein Unterformular einfügen, dass die Tabelle tblArtikel als Datenherkunft verwendet, alle Felder dieser Tabelle anzeigt und den Wert Datenblatt als Standardansicht nutzt, brauchen wir nur noch eine Schaltfläche im Hauptformular, die den Kopiervorgang durchführt (siehe Bild 1).

Haupt- und Unterformular mit der Schaltfläche zum Kopieren im Hauptformular und den Daten im Unterformular

Bild 1: Haupt- und Unterformular mit der Schaltfläche zum Kopieren im Hauptformular und den Daten im Unterformular

Diese nennen wir cmdDatensatzKopierenUF und legen dafür, wieder mit dem Schaltflächen-Assistent, die Prozedur zum Duplizieren des aktuellen Datensatzes an. Die Prozedur erleichtern wir noch um die Fehlerbehandlung, um direkt zu erkennen, welche Zeile einen eventuellen Fehler auslöst (siehe Listing 1).

Private Sub cmdDatensatzKopierenUF_Click()
     'Fehlerbehandlung entfernt
     DoCmd.RunCommand acCmdSelectRecord
     DoCmd.RunCommand acCmdCopy
     DoCmd.RunCommand acCmdRecordsGoToNew
     DoCmd.RunCommand acCmdSelectRecord
     DoCmd.RunCommand acCmdPaste
End Sub

Listing 1: Kopieren des Datensatzes im Unterformular

Anschließend starten Sie die Prozedur mit einem Mausklick auf die Schaltfläche cmd-Daten-satz-ko-pieren-UF und erhalten die Fehlermeldung aus Bild 2. Anscheinend findet Access also nichts, was es aktuell kopieren könnte – was bei genauerer Betrachtung auch logisch ist: Immerhin sollte das zu kopierende Objekt auch den Fokus besitzen oder in einer anderen Form markiert sein. Aber selbst wenn Sie noch vor dem Mausklick auf die Schaltfläche cmdDatensatzKopieren-UF den zu kopierenden Datensatz im Unterformular markiert haben, so verliert das Unterformular doch zum Zeitpunkt des Mausklicks auf die Schaltfläche den Fokus. Das ist jedoch kein großes Problem: Es gibt nämlich ebenfalls Befehle, um den Fokus auf die meisten Elemente der benutzerdefinierten Formulare zu verschieben – in diesem Fall auf das Unterformular-Steuerelement. Damit die Prozedur ihren Dienst tut, müssen Sie einfach nur die folgende Anweisung als erste Zeile der Prozedur einfügen:

Fehler, der beim Versuch, den Datensatz im Unterformular zu kopieren, ausgelöst wird.

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar