none
Copy & Paste-Methode in Access-Formular programmieren

    Frage

  • Liebe Community,

    ich sitze momentan an einem etwas umstädnlicherern Access-VBA Projekt und bin jetzt an einem Punkt angelangt, an dem ich eure Hilfe benötige.

    Die Problemstellung ist folgende (ich verwende Office 2003 Prof.):

    Ich habe in Access einige Daten ausgewertet (in Form von Pivot-Tabellen), die aus einer verknüpften Excel-Tabelle stammen. Die Auswertung über Pivot-Tabellen konnte ich nicht über Excel direkt machen, dass ich im Datenfeld der Tabelle Bezeichnungen benötige und keine mathematischen Operationen und das funktioniert ja wunderbar in Access.

    Allerdings brauche ich diese Pivot-Tabelle (so wie sie ist) in Excel zur späteren Weiterverarbeitung.

    Bisher habe ich das immer manuell über copy (Access) und paste (ins Excel) gemacht. Da allerdings der Gesamtprozess (da gehört noch einiges mehr dazu als hier beschrieben) mehr automatisiert werden soll, möchte ich dieses händische Kopieren ebenfalls automatisieren.

    Ich habe jetzt schon die verschiedensten Sachen ausprobiert, leider hat nichts davon funktioniert (z.B. SendKey, etc.).

    Vielleicht könntet ihr mir einen Tipp geben, wie es richtig geht. Anbei habe ich nochmal einen Screenshot von den Daten gemacht, damit ihr es euch besser vorstellen könnt.

    Mir wäre es nur wichtig, diese Tabelle irgendwie in die Zwischenablage oder so zu bekommen. Diese dann später in eine neue Excel-Instanz zu schaffen, soll dann mein Problem sein. :)

    Hier der Link: http://dl.dropbox.com/u/2719690/Capture.PNG

    Noch kurz ein paar Worte zu diesem Bild:

    - Die Daten sind relativ sinnlos, es soll das Problem nur etwas visualisieren.

    - die Pivot-Tabelle ist als Subform auf dem eigentlichen Formular platziert. Wir haben also zwei Formulare.

    - Bisher habe ich halt immer in die Pivottabelle geklickt, Strg+A und dann in ein leeres Excel-Sheet STRG-V

    Ok, ich hoffe ich konnte euch meine Problemstellung detailliert genug schildern.

    Vielen Dank für eure Hilfe.

     

    VG

    Patrick

     

     

     

    Montag, 15. August 2011 17:05

Antworten

Alle Antworten

  • Hallo Patrick

    Patrick-Schwarz wrote:

    Bisher habe ich das immer manuell über copy (Access) und paste (ins
    Excel) gemacht. Da allerdings der Gesamtprozess (da gehört noch einiges
    mehr dazu als hier beschrieben) mehr automatisiert werden soll, möchte
    ich dieses händische Kopieren ebenfalls automatisieren.

    Ich habe jetzt schon die verschiedensten Sachen ausprobiert, leider hat
    nichts davon funktioniert (z.B. SendKey, etc.).

    Lass' besser die Finger SendKeys. Gefährlich, unzuverlässig und IIRC in neusten Versionen nicht mehr verfügbar.

    Vielleicht könntet ihr mir einen Tipp geben, wie es richtig geht. Anbei
    habe ich nochmal einen Screenshot von den Daten gemacht, damit ihr es
    euch besser vorstellen könnt.

    Eine zuverlässige Methode ist folgende:

    - In Access ein Recordset anlegen, welches die gewünschten Daten beinhaltet (kann auch ein Form Recordset Clone sein).
    - Excel im OLE Automatisierungsmodus öffnen und dort das gewünschte Workbook laden
    - Dann über die Methode CopyFromRecordset in Excel die Daten von Access heraus einfügen.

    Also alles in VBA, z.B. auf Mausklick auf eine Schaltfläche.

    Gruss
    Henry

    Dienstag, 16. August 2011 05:05
  • Guten Morgen Henry,

    zunächt vielen Dank für dein Interesse an meinem Problem.

    Die Idee finde ich ich prinzipiell wirklich gut. Mir fällt gerade auf, dass ich vergessen habe zu schreiben, dass ich die Darstellung der Daten in der Pivot-Tabelle genauso brauche wie sie im Access aussieht.

    D.h. ich benötige nicht nur die Daten, sondern auch wirklich das Pivot-Layout aus Access. Der Hintergrund ist, dass später ein Script über die Excel-Felder läuft und eine Visio-Darstellung der Pivot-Tabelle macht.

    Ich glaube, dass ich diese Struktur verlieren würde wenn ich das über ein RecordSet Clone mache oder?

     

    VG

    Patrick

    Dienstag, 16. August 2011 06:17
  • Hallo Patrick

    Aha, nun verstehe ich. Du möchtest den Inhalt der Pivot Tabelle, so wie diese interaktiv aufgebaut ist, nach Excel extrahieren.

    Hast Du schon mal versucht, per VBA auf Form.PivotTable zuzugreifen und diese direkt in einen Range in Excel einzufügen?

    Alternativ kannst Du evt. die SourceData der PivotTable des Forms in ein Array abfüllen und dann dieses Array nach Excel per VBA in einen Range reinschreiben.

    Gruss

    Henry

    Dienstag, 16. August 2011 08:02
  • Hallo,

    Patrick-Schwarz wrote:

    [...] Copy & Paste [...]

    Der Vollstaendigkeit halber:

    http://www.donkarl.com?FAQ6.15

    Dabei geht es um den programmatischen Einsatz der Menuepunkte im Menue
    Bearbeiten. Sie eignen sich aber nicht fuer dein Vorhaben. Henry hat dir
    eine moegliche Vorgehensweise schon beschrieben.
    Gruss - Peter


    Mitglied im http://www.dbdev.org
    FAQ: http://www.donkarl.com

    Dienstag, 16. August 2011 08:22
    Moderator
  • Hallo ihr beiden,

    ich habe nochmal den "unsauberen" SendKeys-Ansatz versucht und hatte diesmal Erfolg. Hier mal ein Auszug aus meiner Funktion:

    ....

    ' Focus auf das gewünschte Element setzen
    Forms.Item("frmVertrieb").setFocus
    Me.Pivot_Vertrieb_Status.setFocus

    SendKeys ("^A"), True

    SendKeys ("^C"), True

    Me.OLEExcelVertrieb.SetFocus

    SendKeys ("^V"), True

    ....

    Nicht die eleganteste Lösung, aber sie macht genau das, was ich brauche.

    @ Peter: Ja das habe ich auch schon versucht, hätte auch fast geklappt, wenn nicht diese Menüelemente deaktiviert wären. ;)

    VG

    Patrick

     

     

    Dienstag, 16. August 2011 16:12
  • Hallo Patrick

    Bist Du ganz sicher, dass diese Lösung genau das macht, was Du willst? Und nur genau das? Schau mal hier:

    http://www.donkarl.com?FAQ7.8

    und hier:

    http://msgroups.net/microsoft.public.access.forms/SendKeys-Windows-7-Problem

    Verwende statt (Pfui-)Sendkeys besser eine API Funktion wie diese hier, wenn Du denn wirklich über SendKeys laufen willst:

    http://access.mvps.org/access/api/api0046.htm

    Und für Copy/Paste gibt es ja die Möglichkeit

    RunCommand acCmdCopy
    RunCommand acCmdPaste
    

    zu verwenden.

    Gruss

    Henry

     

     
    Mittwoch, 17. August 2011 06:25
  • Hallo Henry,

    habe heute wieder den ganzen Tag an dem Projekt gearbeitet. Ich muss sagen, dass die SendKeys-Methode genau das macht, was ich brauche.

    Schande über mein Haupt, dass ich sie benutzte. Aber irgendwie sind es ja immer "fiesen" Funktionen, die funktionieren! ;)

    Danke für die Hilfreichen Tricks und Webseiten!

    VG

    Patrick

    Mittwoch, 17. August 2011 17:45