Mit Makro aus Access kopieren

Ich muss aus Access jeweils genau einen gefundenen Datensatz in eine Excel-Datei kopieren und zwar in die erste freie Zeile, also anhängen.

Den gefundenen Datensatz in Access markiere ich mit [F8], kopiere ihn mit [STRG]+[c] um schliesslich mit [ALT]+[TAB] zu Excel zu wechseln, um ihn dort mit [STRG]+[v] einzufügen.

Wie kann ich diesen Vorgang automatisieren?

Leider gibt es in Access keinen Makroaufzeichner. Idealerweise stelle ich mir vor, in Access nur eine Tastenkombination für die geschilderte Prozedur auszuüben, ohne Access dabei zu verlassen, dass also im Hintergrund in die Excel-Datei angehangen wird.

Vielen Dank im Voraus für Eure Lösungsvorschläge :smile:

Hallo 404,

Hallo,

  • Verknüpfe die Excel-Tabelle
  • erstelle eine Anfügeabfrage
  • bastel dir einen Button der die Abfrage auslöst
  • fertig

was aber nicht (mehr) in neueren Access-Versionen funktioniert…

Insofern wäre man in diesem Fall auf ein Anhängen via Excel-Programmierung (Automation) angewiesen.

Nachzufragen, warum überhaupt sowas gebraucht wird, führt wahrscheinlich nicht weiter… :wink:

Hallo Wolfgang,

vielen Dank erstmal für Deine Antwort.

Vielleicht habe ich sie nicht richtig verstanden, aber woher soll die zu Verknüpfende Excel-Tabelle wissen, welchen Datensatz ich aus der Abfrage auswählen werde, bzw. ausgewählt habe?

Wenn die Abfrage nur einen Datensatz enthalten würde, könnte man sich mit Deinem Vorschlag sicher der Lösung nähern.

Schönen Gruss,
Hans [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Ich benutze Access 2000.

Was brauche ich wofür? Frag ruhig genau nach, darum sind wir ja hier :wink:

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Hans,

die Exceltabelle muss es nicht „wissen“, die „Arbeit“ wird ja von der Anfügeabfrage erledigt.

Wenn die Abfrage nur einen Datensatz enthalten würde, könnte
man sich mit Deinem Vorschlag sicher der Lösung nähern.

  • du hast ein Tabelle mit allen Datensätzen
  • du erstellst eine Abfrage (als Filter) mit dem gewählten Datensatz, der dann von der Abfrage in die eingebundene Exceltabelle übertragen wird.

Vielleicht könnte man das noch anders lösen, wenn du mal genauer beschreiben könntest, WAS du WARUM so machst. Bitte immer mit Angabe der Access-Version.

Grüße aus Schönberg (Lübeck)
Wolfgang
(Netwolf)

Hallo Wolfgang,

ich benutze Access 2000.

Die Datenbank beinhaltet Kundenadressen. Die Auswahl findet via Access mittels einem formularbasierten Filter statt.

Je nachdem, wieviel und welche Informationen mir zur Verfügung stehen, wird im Idealfall genau ein Kunde angezeigt, i.d.R jedoch mehrere.

In Excell sollen diese Daten überführt werden, um diverse Seriendrucke aus Word heraus zu starten.

Im übrigen handelt es sich auch bei Excel und Word um die Versionen 2000.

Gruss,
Hans

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Hans,

ich habe eine gute Nachricht für dich: du benötigst kein Excel, keine Exceltabellen etc.!

Als Datenbasis kannst du in Word auch eine Tabelle und/oder Abfrage in Access angeben :smile:

Frage daher: ist diese Serienbriefauswahl immer einmalig, oder soll die Auswahl für später (Ewigkeit) gespeichert bleiben?

Für Einmalig wäre ein zusätzliches Feld mit dem Namen SerBrief und Feldtyp JA/NEIN sinnvoll.

Für „Ewig“ wäre ein zusätzliches Feld mit dem Namen SerBrief und Feldtyp Text (255 Zeichen) oder MEMO sinnvoll. Dort könnte man dann Serienbriefkürzel für Aktionen hinterlegen, die dann später über eine Abfrage (die dann als Datenquelle für den SB dient) ausgewertet werden.

Man kann dann dort ein Kürzel wie „WK“ (bedeutet bei mir Weihnachtskarte) eintragen, getrennt z.B. durch ein Semikolon (:wink: dann „GK“ (Geburtstagskarte) usw…
Im Grunde genau so wie die Kategorien in Outlook. Dessen Kontakte man übrigens auch als Datenquelle für Serienbriefe nutzen kann :smile:

Grüße aus Schönberg (Lübeck)
Wolfgang
(Netwolf)

Hallo Wolfgang,

die gute Nachricht klingt wirklich gut :smile: auch wenn ich sie noch nicht umgesetzt habe.

Die Serienbriefauswahl erfolgt immer einmalig, da sie immer nach anderen Kriterien erfolgt.

Jedoch besteht noch immer ein Problem, welches ich als das grundlegendste sehe, das wie folgt aussieht:

Suche ich beispielsweise die Person Meyer aus X, und finde ihn nicht, obwohl sie existieren müsste, weiss ich, dass ich eine falsche Information für die Suchabfrage erhalten habe.

Demnach suche ich die Person „M*“ aus X.

Angezeigt werden dann alle Mayers, Maiers, Meiers und sonstige Meiereien. Aus diesen Datensätzen treffe ich folglich eine Sichtauswahl. Ich müsste also den Datensatz markieren und genau eben nur diesen markierten Datensatz dem Sereinbrief zufügen.
Genau da liegt der Hund begraben.

Wie kann ich diesen markierten Datensatz der Serienbriefauswahl hinzufügen?

Grüsse,
Hans

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Hans,

Wie kann ich diesen markierten Datensatz
der Serienbriefauswahl hinzufügen?

wie ich dir schon geschrieben habe:


Für Einmalig wäre ein zusätzliches Feld mit dem Namen SerBrief
und Feldtyp JA/NEIN sinnvoll.

erstelle in deiner Adressen-Tabelle ein zusätzliches Feld, dass du einfach als Auswahl für den Serienbrief nutzt.

Grüße aus Schönberg (Lübeck)
Wolfgang
(Netwolf)

BTW: könntest du bitte das Fullquote lassen, oder immer oben antworten? Es ist lästig, immer nach unten scrollen zu müssen, um deine Antwort zu lesen.
Außerdem weiß ich, was ich geschrieben habe :smile:
Danke!

Ok Wolfgang,

das Feld habe ich wie beschrieben in die Tabelle eingefügt. Ebenso habe ich es mit ins Abfrageformular eingefügt, die Abfrage dahingehend erweitert und die Datenquelle in den Seriendruckdokumenten entsprechend aktualisiert.

Klappt wunderbar für die verschiedenen Seriendrucke.

Nur bleibt in dem neuen Ja/Nein Feld, für jeden Datensatz den ich markiert habe, „Ja“ stehen. Vielleicht habe ich ja was falsch gemacht oder vergessen einzufügen?

So aber muss ich leider mit dem Formular noch mal gesondert nach allen Datensätzen suchen, die mit „Wahr“ (Ja) von mir markiert wurden und dann alle Häkchen einzeln manuell löschen, da sie ja für den nächsten Seriendruck nicht mehr benötigt werden.

Zudem muss ich in der Abfrage, an dem das Formular gebunden ist, jedes mal in das Feld für den Serienbrief das Kriterium „wahr“ eintragen, nach dem ich alle Datensätze markiert habe und anschliessend für die neue Suche, aus der ein neuer Sereindruck gestartet werden soll, wieder entfernen.

Da es sich um über 5000 Datensätze mit mindestens 50 verschiedenen Einträgen handelt, wahr meine Lösung zwar „zu Fuss“, wie Du das formuliert hast aber in Punkto Datensicherheit finde ich Deine Lösung nicht so gut. Denn das manuelle „Häkchen“ entfernen birgt das Risiko, das ein Datensatz nicht mehr gefunden wird.

Aber vielleicht gibt es dafür ja auch eine Lösung?

Grüsse,
Hans

Hallo Hans,

Nur bleibt in dem neuen Ja/Nein Feld, für jeden Datensatz den
ich markiert habe, „Ja“ stehen. Vielleicht habe ich ja was
falsch gemacht oder vergessen einzufügen?

ja, logisch…einen Button/Taste die die Häkchen wieder zurück setzt. Kann man auch beim Ereignis „Formular laden“ erledigen lassen:

DoCMD.RunSQL „UPDATE MeineTabelle SET MeineTabelle.MEIN_JN_FELD = False;“

Zudem muss ich in der Abfrage, an dem das Formular gebunden
ist, jedes mal in das Feld für den Serienbrief das Kriterium
„wahr“ eintragen, nach dem ich alle Datensätze markiert habe

wenn du das Kontrollkästchen [] statt eines Textfeldes verwendest, musst du nur einen Klick [X] machen :smile:

erstelle dir eine Taste auf deinem Formular (Ereignis = beim Klick):
UPDATE MeineTabelle SET MeineTabelle.MEIN_JN_FELD = True
WHERE ([Formulare]![MeinFormular].[Filter]);

damit werden alle Häkchen gesetzt, je nach dem, was du gefiltert hast.
Der Formularkopf bzw. der Formularfuß sind gute Plätze dafür :smile:

aber in Punkto
Datensicherheit finde ich Deine Lösung nicht so gut. Denn das
manuelle „Häkchen“ entfernen birgt das Risiko, das ein
Datensatz nicht mehr gefunden wird.
Aber vielleicht gibt es dafür ja auch eine Lösung?

siehe oben…
mit zwei Zeilen Code und zwei Tasten ist dein Problem gelöst :smile:

Grüße aus Schönberg (Lübeck)
Wolfgang
(Netwolf)

Hallo Wolfgang,

mit zwei Zeilen Code und zwei Tasten ist dein Problem gelöst

… ich hänge schon an der ersten Zeile :frowning:

Ich habe beim Formular unter Eigenschaften, beim Reiter Ereignisse, in der Zeile „Bei Laden“ wie vorgeschlagen

DoCMD.RunSQL „Update Mitglieder SET Mitglieder.SerBrief = False;“

eingetragen.

Wenn ich das Formular jetzt lade, erscheint die Meldung „Microsoft Office Access kann das Makro ‚DoCMD‘ nicht finden.“

Die Meldung kann ich dann mit OK wegklicken und die Einträge in der Tabelle wurden nicht zurückgesetzt.

Grüsse,
Hans

Hallo Hans,

Ich habe beim Formular unter Eigenschaften, beim Reiter
Ereignisse, in der Zeile „Bei Laden“ wie vorgeschlagen

DoCMD.RunSQL „Update Mitglieder SET Mitglieder.SerBrief =
False;“

eingetragen.

sorry, ich dachte du kannst VBA und weißt, wie man den VBA-Editor aufruft. Das ist VBA Code und KEIN Makro.

  • wähle besser die Zeile -> beim Öffnen,
  • lösche aber erstmal alles aus der anderen raus
  • Klicke nun doppelt auf die Zeilenbeschreibung, es wird ein Eintrag automatisch vorgenommen: [Ereignisprozedur]
  • Am Ende dieser Zeile siehst du nun drei Punkte […]
  • Klicke auf diese Taste mit den Punkten
    -> nun bist du im VBA Editor direkt an der Stelle, wo du für dieses Ereignis etwas eintragen kannst
  • Automatisch werden Kopf und Fuß der Funktion schon eingetragen:

Private Sub Form_Open(Cancel As Integer)

End Sub

genau dazwischen platzierst du dann den Code:

Private Sub Form_Open(Cancel As Integer)
DoCMD.RunSQL „Update Mitglieder SET Mitglieder.SerBrief =False;“
End Sub

Nun kannst du den VBA-Editor schließen, das Geänderte Speichern und bist fertig damit.

Grüße aus Schönberg (Lübeck)
Wolfgang
(Netwolf)

Hallo Wolfgang,

sorry, ich dachte du kannst VBA und weißt, wie man den
VBA-Editor aufruft. Das ist VBA Code und KEIN Makro.

Ne, bin blutiger Anfänger, aber der Einäugige unter den Blinden und „EDV zu Fuss“ huldigt man hier als Wunder des Fortschritts. Denn diese „DB“ an der ich arbeite ist eigentlich nur eine riesige Tabelle die alle mit [STRG]+[f] durchsuchen und zu der keiner Schreibrechte besitzt.

Zurück zum Thema :wink:

Also das mit den Häkchen wieder löschen klappt prima, so wie ich es mir vorgestellt habe.

Nur das mit dem Button funktioniert nicht. Ich habe in die Ereignisprozedur, so wie Du es zuvor beschrieben hast,

UPDATE Mitglieder SET Mitglieder.SerBrief = True

WHERE ([Formulare]![abfr_deckblatt_seriendruck].[Filter]);

geschrieben.

Darauf erscheint eine Fehlermeldung mit Syntaxfehler.

Grüsse,
Hans