Januar 19, 2021, 07:06:34

Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!


Dokumentinhalte automatisch in die Zwischenablage kopieren (ohne öffnen)

Begonnen von Madmán, November 25, 2020, 22:11:39

⏪ vorheriges - nächstes ⏩

Madmán

Hallo Gemeinde,

eventuell könnt ihr mir bei einem kleinen Problem helfen.
Aktuell folgende Situation:

Über einen Button im Formular wird ein Bericht via VBA als .rtf exportiert und geöffnet, um den Inhalt dann manuell kopieren zu können und diesen dann in einen anderes System einzufügen.

Ich möchte nun diesen manuellen Schritt entfernen.
Also z.B. das vorher erzeugte Dokument automatisch auslesen und in der Zwischenablage speichern, ohne dass das Dokument geöffnet wird. Meinetwegen könnte das Erzeugen des Dokumentes auch wegbleiben, nur leider funktionierte das bisher wegen der Formatierung nicht. D.h. man kann den Access Bericht nicht vernünftig kopieren (über strg + a) und wenn der Inhalt kopiert wurde, dann mit Spaltenüberschriften usw.

Ich weiß das immer viele Wege zum richtigen Ziel gibt, deshalb könnt ihr auch gern andere Vorschläge unterbreiten.

Vielen Dank vorab!

PhilS

Da der gewünschte Inhalt in deinem konkreten Fall von Access nur in eine Datei geschrieben wird und meines Wissens kein anderes vergleichbares Output verfügbar ist, führt hier kein Weg um den Export herum.

Meine erste Idee wäre, die Datei "normal" zu exportieren und danach als Textdatei zu öffnen und den Dateiinhalt als Text zu lesen und in die Zwischenablage einzufügen. - Problematisch ist dabei das RTF-Format, weil es scheinbar kein Standard-Clipboard-Format ist. - Eine kurze Suche zu Ansätzen um RTF in's Clipboard zu kopieren, brachte nur wenig zufriedenstellende Ergebnisse.
Access DevTools - Find and Replace
Komfortables Suchen und Ersetzen in den Entwurfseigenschaften von Access-Objekten. In Abfragen, Formularen, Berichten und VBA-Code - Überall und rasend schnell!

steffen0815

Hallo,
du schreibst die RTF auf die Platte.
Im nächsten Schritt öffnest du die Datei mit verstecktem Word und kopierst den Inhalt in die Zwischenablage.

Gruß Steffen

ebs17

Meine erste Überlegung wäre zu fixieren, was genau in dem anderen System benötigt wird, ob es eine praktikable Schnittstelle dahin gibt und wodurch sich der Bericht auszeichnet.
Vielleicht kann man ja Abfragedaten direkt übergeben, was dann einen sehr anderen Ablauf nach sich zieht.
Mit freundlichem Glück Auf!

Eberhard

Madmán

Vielen Dank für eure schnellen Antworten.

Zitat von: PhilS am November 26, 2020, 05:57:57Da der gewünschte Inhalt in deinem konkreten Fall von Access nur in eine Datei geschrieben wird und meines Wissens kein anderes vergleichbares Output verfügbar ist, führt hier kein Weg um den Export herum.

Meine erste Idee wäre, die Datei "normal" zu exportieren und danach als Textdatei zu öffnen und den Dateiinhalt als Text zu lesen und in die Zwischenablage einzufügen. - Problematisch ist dabei das RTF-Format, weil es scheinbar kein Standard-Clipboard-Format ist. - Eine kurze Suche zu Ansätzen um RTF in's Clipboard zu kopieren, brachte nur wenig zufriedenstellende Ergebnisse.

Gibt es denn ein anderes, besser geeignetes Format für den Export?


Zitat von: steffen0815 am November 26, 2020, 09:42:45Hallo,
du schreibst die RTF auf die Platte.
Im nächsten Schritt öffnest du die Datei mit verstecktem Word und kopierst den Inhalt in die Zwischenablage.

Das habe ich probiert, aber ich bekomme keinen Code hin, der ein brauchbares Ergebnis liefert. :(

Zitat von: ebs17 am November 26, 2020, 10:14:01Meine erste Überlegung wäre zu fixieren, was genau in dem anderen System benötigt wird, ob es eine praktikable Schnittstelle dahin gibt und wodurch sich der Bericht auszeichnet.
Vielleicht kann man ja Abfragedaten direkt übergeben, was dann einen sehr anderen Ablauf nach sich zieht.

War mein erster Gedanke, nur lassen es die Richtlinien nicht zu, einen entsprechenden Koppler oder ODBC Treiber zu verwenden.

ebs17

ZitatODBC Treiber
Also geht es wohl um Daten. RTF beinhaltet ja neben Daten auch eine Formatiermöglichkeit, und ein exportierter Bericht enthält allermeist auch einiges Darstellungs-Trallala neben eigentlichen Daten.

Ein Format, das praktisch immer bei einem Datenaustausch funktionieren sollte und was jedes Datensystem beherrschen sollte, wäre eine CSV (Textdatei).
Wenn also das unbekannte andere System Datenaustausch zulassen würde, könnte die CSV dort importiert werden. Dass man dann aus Access heraus so exportiert, wie die Daten im Zielsystem gefragt sind, versteht sich von selbst.
Mit freundlichem Glück Auf!

Eberhard

PhilS

Zitat von: Madmán am November 26, 2020, 19:12:43Gibt es denn ein anderes, besser geeignetes Format für den Export?
Du solltest mal deine Anforderungen genauer Beschreiben. Ich bin bisher davon ausgegangen, dass du explizit RTF als Format benötigst.
Access DevTools - Find and Replace
Komfortables Suchen und Ersetzen in den Entwurfseigenschaften von Access-Objekten. In Abfragen, Formularen, Berichten und VBA-Code - Überall und rasend schnell!

Madmán

Zitat von: ebs17 am November 26, 2020, 19:35:58
Zitat von: undefinedODBC Treiber
Also geht es wohl um Daten. RTF beinhaltet ja neben Daten auch eine Formatiermöglichkeit, und ein exportierter Bericht enthält allermeist auch einiges Darstellungs-Trallala neben eigentlichen Daten.

Ein Format, das praktisch immer bei einem Datenaustausch funktionieren sollte und was jedes Datensystem beherrschen sollte, wäre eine CSV (Textdatei).
Wenn also das unbekannte andere System Datenaustausch zulassen würde, könnte die CSV dort importiert werden. Dass man dann aus Access heraus so exportiert, wie die Daten im Zielsystem gefragt sind, versteht sich von selbst.

Genau. Die Darstellung und genaue Formatierung sollte schon beibehalten werden.
Leider reichen meine VBA Kenntnisse nur für den Export in das .rtf oder .pdf Format aus.
Also zum Thema unbekanntes System -> es handelt sich um SAP und ich weiß, dass man Access und SAP verknüpfen kann. Ebenso kann man Dateien einlesen. Nur geben das interne Richtlinien nicht her. Deshalb bisher C&P.


Zitat von: PhilS am November 26, 2020, 19:45:08
Zitat von: Madmán am November 26, 2020, 19:12:43Gibt es denn ein anderes, besser geeignetes Format für den Export?
Du solltest mal deine Anforderungen genauer Beschreiben. Ich bin bisher davon ausgegangen, dass du explizit RTF als Format benötigst.

Also im Prinzip ist mir das Format egal. Ich habe einen Bericht, der die Zielformatierung enthält. Der Einfachheit halber wird dieser über einen Button in .rtf formatiert und automatisch geöffnet. Das geschieht, damit der User einfach Strg + a und anschließend Strg + c drücken kann, um den Inhalt in eine Maßnahme von SAP einzufügen.
Jetzt hätte ich gerne genau diesen Schritt eliminiert. Also öffnen der Datei, kopieren des Inhaltes und abschließendes Schließen der Datei.
Ich hatte über Sendkeys nachgedacht, aber da das meist mehr Nachteile als Vorteile hat, hab ich mich dagegen entschieden.

Ich hatte auch schon einen Code geschrieben, welcher direkt im Anschluss des Exportes die Datei auslesen sollte. Nur kam da alles mit raus. Also sämtliche Formatierungen, Zeilenumbrüche usw. neben dem Text.
Ich würd euch das gern zeigen, nur habe ich so viel dran rumgespielt, dass ich das Ergebnis nicht mehr reproduziert bekomme  ::)

PhilS

Zitat von: Madmán am November 26, 2020, 23:20:40Also im Prinzip ist mir das Format egal. Ich habe einen Bericht, der die Zielformatierung enthält. Der Einfachheit halber wird dieser über einen Button in .rtf formatiert und automatisch geöffnet. Das geschieht, damit der User einfach Strg + a und anschließend Strg + c drücken kann, um den Inhalt in eine Maßnahme von SAP einzufügen.
Schön und gut. - Aber die wesentlichen Fragen lässt das weiterhin unbeantwortet.

Das Format ist dir egal, aber es gibt eine gewünschte Zielformatierung. - Wie ist passt das zusammen?

Brauchst du in der Zielformatierung die RTF-Textformatierung, also Fett-/Kursivdruck, Schriftgrößen, Farben, usw., oder reicht dir einfach der nackte Text?

Wenn es nur um reinen Text geht, kannst du dir in Access/VBA einen einfachen String zusammensetzen und in die Zwischenablage kopieren. - Bericht, Export, RTF, Datei etc. wäre dann überhaupt nicht notwendig.
Access DevTools - Find and Replace
Komfortables Suchen und Ersetzen in den Entwurfseigenschaften von Access-Objekten. In Abfragen, Formularen, Berichten und VBA-Code - Überall und rasend schnell!

Madmán

Zitat von: PhilS am November 27, 2020, 09:38:07Das Format ist dir egal, aber es gibt eine gewünschte Zielformatierung. - Wie ist passt das zusammen?

Brauchst du in der Zielformatierung die RTF-Textformatierung, also Fett-/Kursivdruck, Schriftgrößen, Farben, usw., oder reicht dir einfach der nackte Text?

Wenn es nur um reinen Text geht, kannst du dir in Access/VBA einen einfachen String zusammensetzen und in die Zwischenablage kopieren. - Bericht, Export, RTF, Datei etc. wäre dann überhaupt nicht notwendig.

Okay verstehe. Also ich wollte eigentlich auf das Dateiformat hinaus. Also ob .rtf oder .pdf oder ...
Das Format des Textes nicht ganz. Es müsste (aktuell!) Lediglich Text mit entsprechenden Tabulatoren und Zeilenumbrüchen gespeichert werden.
Z.B.

# Hier fängt Abschnitt 1 an #

1.1 Das ist ein Unterpunkt:  - Stichpunkt 1
                            - Stichpunkt 2

2.2 ....

...

# Abschnitt 1 Ende #


Das müsste sicherlich über eine String Variable gehen? Auch wenn es bei mehreren Berichten zwecks der "Füllung" des Variablen anstrengender wird, als nen Bericht über den Editor zu erstellen.
Nur wenn jetzt Textformatierungen hinzukommen sollten, dann wirds schwierig mit ner String.
Deshalb wollte ich von vornherein auf die .rtf Variante.

Ist ein entsprechender Code zum Einlesen einer kompletten Datei sehr aufwendig?

ebs17

Zitates handelt sich um SAP
Ist Deine Verfahrensweise Deine eigene Idee oder Vorgabe einer zuständigen IT?
Vermutlich werden die Ausgangsdaten dann auch weniger oder mehr umständlich aus dem SAP-System  bezogen und eigenverarbeitet?


Mit freundlichem Glück Auf!

Eberhard

Madmán

Zitat von: ebs17 am November 27, 2020, 10:41:58
Zitates handelt sich um SAP
Ist Deine Verfahrensweise Deine eigene Idee oder Vorgabe einer zuständigen IT?
Vermutlich werden die Ausgangsdaten dann auch weniger oder mehr umständlich aus dem SAP-System  bezogen und eigenverarbeitet?

Ja ist meine eigene Idee. Aber die Ausgangsdaten werden nicht aus dem SAP bezogen.
Eigentlich handelt es sich um Standard Dokumentationen, welche ich automatisiert habe.
Und da SAP keine zufriedenstellenden Möglichkeiten, für Formulare mit entsprechenden Auswertungen bietet und Anpassungen regelmäßig vorgenommen werden, hat sich Access als das das beste Tool herausgestellt. Vorhergegangene Lösungen mit Excel waren da weit aus unflexibler.

ebs17

Zitatmit entsprechenden Tabulatoren und Zeilenumbrüchen
Tabulator (vbTab) und Zeilenumbruch (vbCrLf) sind als Steuerzeichen (ggf. auch über die Chr-Entsprechungen) in einen Text ebenso platzierbar, letzterer in einer Stringvariable. Sprich, wenn man weiß, was man in welcher Weise zusammensetzen will, kann man das unmittelbar tun, wie auch eine Übergabe an die Zwischenablage: Codebeispiel - Zwischenablage und Text.

ZitatNur wenn jetzt Textformatierungen hinzukommen sollten
Man würde sicher erst einmal für sich inhaltlich erfassen, was das sein könnte.
Mit freundlichem Glück Auf!

Eberhard

steffen0815

Hallo,
auch wenn ich der Meinung bin, das RTF keine Datenexportformat ist:Function fncRep2ClipBoard(repName As String)
Dim wdApp As Object, wdDoc As Object
Dim tmpFile As String
tmpFile = Environ("TEMP") & "tmprep.rtf"
If Dir(tmpFile) <> "" Then Kill tmpFile
DoCmd.OutputTo acOutputReport, repName, acFormatRTF, tmpFile

Set wdApp = CreateObject("Word.Application")
    wdApp.Visible = False ' true zum testen sonst false
Set wdDoc = wdApp.Documents.Open(tmpFile, , True)
    wdApp.Selection.WholeStory
    wdApp.Selection.Copy
    wdDoc.Close
    wdApp.Quit
    If Dir(tmpFile) <> "" Then Kill tmpFile
End Function

Programmaufruf fncRep2ClipBoard "DeinBericht"
msgbox "Daten in der Zwischenablage"

Fehlerbehandlung und Funktionsrückgabe wäre noch einzubauen.
Gruß Steffen

Madmán

Zitat von: steffen0815 am November 29, 2020, 11:25:14Hallo,
auch wenn ich der Meinung bin, das RTF keine Datenexportformat ist....


Vielen Dank für die Antwort, habe inzwischen das Dateiformat auf .txt geändert.

Der Code den ich verwende sieht ähnlich aus.
Ich poste ihn dennoch, falls ihn jemand gebrauchen kann.
Funktionieren tut er auch.

Folgendes im Modul:

Option Compare Database
Option Explicit
Public Function DateiAuslesen(Dateipfad As String) As String

Dim wdRange        As Word.Range
Dim clp As New MSForms.DataObject
 
  DateiAuslesen = CreateObject("Scripting.FileSystemObject") _
      .OpenTextFile(Dateipfad).ReadAll
 
End Function

Public Sub InsertInClipboard()

Dim strText As String
Dim myData As DataObject


strText = DateiAuslesen("Hier Dateipfad mit Dateiname")
Set myData = New DataObject
myData.SetText strText
myData.PutInClipboard

End Sub

Und im entsprechenden Klassenmodul dann folgendes:
DoCmd.OutputTo acOutputReport, "Reportname", _
acFormatTXT, "Filename", False
Call InsertInClipboard

Entsprechende Fehlerbehandlung ist dann noch einzubauen.

Beste Grüße und vielen Dank für eure Hilfe :)