collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 52
  • Punkt Versteckte: 1
  • Punkt Mitglieder: 2
  • Punkt Benutzer Online:

* Forenstatistik

  • stats Mitglieder insgesamt: 13976
  • stats Beiträge insgesamt: 66571
  • stats Themen insgesamt: 8973
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 17
  • stats Am meisten online: 415

Autor Thema: VBA: Markieren von allen Datensätzen samt Summenzeile im Datenblatt  (Gelesen 160 mal)

Offline KölschMädche

  • Newbie
  • Beiträge: 6
Hallo Zusammen,

ich suche ein Lösung, um per VBA alle Datensätze eines Datenblattes samt Überschriften und Summenzeile zu markieren und kopieren. Danach wird der Inhalt in ein Excelsheet kopiert. Dies soll auch funktionieren, wenn das Datenblatt leer ist.
Es handelt sich um ein Programm mit einem Register, das mehreren UFos als Datenblatt enthält, diese sollen in exakt der Darstellung, die der Benutzer gewählt hat, exportiert werden. Dabei kann der Benutzer auch so gefiltert haben, dass ein UFo keine Datensätze enthält. In diesem Fall möchte ich aber zumindest die Überschriften exportieren.

Analog zu Excel kann ich ja mit der Maus in die linke obere Ecke des Datenblattes klicken und markiere dadurch alles. Das funktioniert ja auch in einem Datenblatt ohne Datensätze. Nur per VBA habe ich noch keine Möglichkeit gefunden. Per RunCommand acCmdSelectAllRecords kann ich nur gefüllte Datenblätter markieren, per Form.SelTop etc. ebenfalls. Per Sendkeys scheitere ich, weil ich den Focus nicht in das leere Datenblatt setzen kann.

Gibt es eine Möglichkeit, den Mausklick in VBA abzubilden?

Viele Grüße
KölschMädche
 

Offline MzKlMu

  • Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 7284
Hallo,
brauchst doch nix markieren. Exportiere einfach die Abfrage mit dem Filter. Die Abfrage exportiert auch wenn kein DS vorhanden ist.
Gruß
Klaus
 

Offline Lachtaube

  • Access Guru
  • ****
  • Beiträge: 1248
Ob man da die Summenzeile mitnehmen kann, weiß ich nicht.
   Me.NameDesUntermularsteuerelements.SetFocus
   RunCommand acCmdSelectAllRecords
   RunCommand acCmdCopy

Professioneller wird die Geschicht, wenn man die Excel-Mappe mittels Automatisierung steuert. Siehe die Excel-Hilfe zu CopyFromRecordset des Range-Objekts.
Grüße von der (⌒▽⌒)
 

Offline KölschMädche

  • Newbie
  • Beiträge: 6
Hallo,

die Abfrage könnte ich leicht exportieren, aber dann wird mir zum Beispiel bei zugrundeliegenden Dropdown-Feldern nur die ID-Spalte, nicht aber der Text, so wie er im Datenblatt angezeigt wird, exportiert. Das passiert übrigens auch bei der Verwendung von CopyFromRecordset.

Und RunCommand acCmdSelectAllRecords setze ich momentan ein, funktioniert aber nicht bei leeren Datenblättern.

Gruß
KölschMädche

 

Offline MzKlMu

  • Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 7284
Hallo,
nimm in die Abfrage auch die Tabellen der Dropdown-Felder mit auf, dann hast Du automatisch auch die Klartexte zum Export, völlig problemlos.

Falls Du die Dropdown-Felder auch in der Tabelle hast, solltest Du diese dort schleunigst entferen, die haben in Tabellen nichts zu suchen. Besonders dann, wenn man eine ID hat.
Gruß
Klaus
 

Offline KölschMädche

  • Newbie
  • Beiträge: 6
Hallo,

kurz zur Erläuterung:
es handelt sich um eine komplexere Entwicklung basierend auf einem SQL-Server-Backend und einem Access-Frontend für eine Auftragsverwaltung. Da je nach Kundengruppen unterschiedliche Anforderungen bestehen, wird die komplette Darstellung von der Definition des Datenumfangs bis zur bedingten Formatierung in Profiltabellen festgelegt. Die UFos baue ich dann basierend auf dem notwendigen Profil auf. Der Anwender kann so leicht zusätzliche Spalten nutzen oder auch weglassen, eine Anpassung des Frontends ist nicht notwendig.

Bisher exportiere ich über acCmdSelectAllRecords und passe danach nur noch die Formate an (samt Kopieren der bedingten Formate). Das führt dann zu exakt derselben Ansicht wie im Frontend.
Jetzt wäre es einfach praktisch gewesen, die Datenblätter 1:1 ins Clipboard zu kopieren, wie ich es ja auch mit der Maus machen kann. Also durch das Markieren der linken, oberen Ecke. Dachte ich zumindest naiverweise  ;)

Falls das nicht möglich ist, muss ich halt selber dafür sorgen, dass ich die Überschriften in den Export übertrage. Wäre halt nur anders schneller gewesen...

Falls Ihr doch einen Tipp habt, immer gerne!

Viele Grüße
KölschMädche
 

Offline MzKlMu

  • Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 7284
Hallo,
ich habe Dir eine Lösung gesagt, was passt Dir daran nicht ?
Mit der Abfrage kriegst Du das alles übertragen. Du hast doch ohnehin schon mit einer Abfrage exportiert. Die anderen Tabllen mit dazu nehmen und fertig.
Gruß
Klaus
 

Offline KölschMädche

  • Newbie
  • Beiträge: 6
Hallo,

nix für ungut - ich hätte ja nur gerne gewusst, ob mir VBA die Möglichkeit bietet, aber scheinbar ist das nicht so.

Viele Grüße
KölschMädche
 

Offline MzKlMu

  • Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 7284
Hallo,
natürlich geht das auch mit VBA. Du musst als Datenbasis für das Formular eine Abfrage verwenden die die Dropdown-Tabellen mit einschließt, da kommst Du unabhängig von der Exportmethode nicht drumrum. Sonst kommst Du ja nicht an die Klartexte. Die Alternative wäre per DLookUp die Klartexte zu holen, das ist aber eine Performancebremse.
Und dann kannst Du per VBA den aktuellen Formularfilter an die Abfrage ohne Filter als Where Klausel anhängen und per
DoCmd.TransferSpreadsheet .... diese Abfrage exportieren. Mit obigem Befehl kann auch angegeben werden ob die Feldnamen mit exportiert werden sollen.
Gruß
Klaus
 

Offline KölschMädche

  • Newbie
  • Beiträge: 6
Hallo,
vielen Dank für Deine Erklärungen, und ja, ich bin in der Lage, das so zu programmieren. (Ich arbeite seit vielen Jahren mit Access/Excel/VBA, bin halt nur im Forum ein NewBie.)

Meine Frage im Eingangspost war eigentlich nur:
Analog zu Excel kann ich ja mit der Maus in die linke obere Ecke des Datenblattes klicken und markiere dadurch alles.
Gibt es eine Möglichkeit, diesen Mausklick in VBA abzubilden? Das hätte mich einfach interessiert. Vielleicht ja auch andere...

Viele Grüße
KölschMädche
 

Offline Lachtaube

  • Access Guru
  • ****
  • Beiträge: 1248
Re: VBA: Markieren von allen Datensätzen samt Summenzeile im Datenblatt
« Antwort #10 am: Juli 05, 2018, 18:26:44 »
Nun, bei leeren Datenblättern funktioniert bei mir (Access 2010) auch kein händisches Kopieren. Kannst Du keine Vorlage der Excel-Mappe verwenden und dann mittels Automation die Daten transferieren? Letztendlich benötigst Du ja nur je Datenblatt eine parallele Abfrage, die statt der Kombifelder die Daten aus den Lookup-Tabellen darstellt. Der Aufwand wäre dann einmalig.
Grüße von der (⌒▽⌒)
 

Offline KölschMädche

  • Newbie
  • Beiträge: 6
Re: VBA: Markieren von allen Datensätzen samt Summenzeile im Datenblatt
« Antwort #11 am: Juli 05, 2018, 19:29:29 »
Hallo Lachtaube,

der Teufel steckt im Detail ;) Es funktioniert tatsächlich nur, wenn die Summenzeile aktiviert ist. Das war mir auch nicht so bewusst. Aber dann funktioniert der Trick auch bei leeren Datenblättern.

Ich habe mir mittlerweile anderweitig beholfen. Ich kann beim Markieren via acCmdSelectAllRecords bleiben, weil ich ja sowieso einen Loop über alle Spalten laufen lasse, um die Formate zu übertragen und Spaltenbreiten anzupassen. In diesem Schritt übertrage ich dann bei leeren Datenblättern die Spaltentitel.

Genauso wie Du es vorschlägst habe ich auch eine Vorlagemappe, in der der Anwender das Seitenlayout einstellt und auch den Bereich definiert, ab dem ich kopieren kann.

Da in meinem Programm der Anwender auch die Spaltenreihenfolge über die Profile selber festlegen kann, nützt mir halt die Abfrage als Quelle nichts, da ich dann die Spalten auch noch wieder sortieren müsste. Oder ich hätte spaltenweise Kopieren müssen. Das ist halt über den genannten Trick nicht nötig.

Ich entwickle nun schon viele Jahre in VBA und es reizt mich immer wieder, Neues zu entdecken. Hätte ja sein können, dass es auch für diesen Klick im Datenblatt eine VBA-Lösung gibt.

Viele Grüße
KölschMädche