webentwicklung-frage-antwort-db.com.de

Wie kopiere ich mit Access / VBA in die Zwischenablage?

Verwenden von VBA in Access2003/2007.

Wie kopiere ich den Inhalt einer Stringvariablen in die Zwischenablage?

Diese Site empfiehlt, eine TextBox mit der Länge Null zu erstellen, die Zeichenfolge in die TextBox zu kopieren und dann DoCmd.RunCommand acCmdCopy Auszuführen. Pfui. Ich meine, wir können den Weg gehen. Aber dennoch. Pfui.

Während der MS Knowledgebase-Artikel zeigt uns, wie es geht, aber es beinhaltet eine Reihe von Windows-API-Aufrufen. Yuk.

Sind das die einzigen zwei Möglichkeiten?

34
hawbsl

VB 6 stellt ein Clipboard -Objekt zur Verfügung, mit dem all dies extrem einfach und bequem ist, das ist jedoch in VBA leider nicht verfügbar.

Wenn ich es wäre, würde ich die API-Route gehen. Es gibt keinen Grund, Angst davor zu haben, native APIs aufzurufen. Die Sprache bietet Ihnen die Möglichkeit, dies aus einem bestimmten Grund zu tun.

Eine einfachere Alternative ist jedoch die Verwendung der Klasse DataObject, die Teil der Forms-Bibliothek ist. Ich würde diesen Weg nur empfehlen, wenn Sie bereits Funktionen aus der Formularbibliothek in Ihrer App verwenden. Hinzufügen eines Verweises auf diese Bibliothek nur zur Verwendung der Zwischenablage scheint ein bisschen albern.

Um beispielsweise Text in die Zwischenablage einzufügen, können Sie den folgenden Code verwenden:

Dim clipboard As MSForms.DataObject
Set clipboard = New MSForms.DataObject
clipboard.SetText "A string value"
clipboard.PutInClipboard

Oder kopieren Sie Text aus der Zwischenablage in eine Zeichenfolgenvariable:

Dim clipboard As MSForms.DataObject
Dim strContents As String

Set clipboard = New MSForms.DataObject
clipboard.GetFromClipboard
strContents = clipboard.GetText
57
Cody Gray

Ich konnte anhand der ersten Google-Ergebnisse nicht herausfinden, wie die API verwendet wird. Glücklicherweise hat mich irgendwo ein Thread auf diesen Link hingewiesen: http://access.mvps.org/access/api/api0049.htm

Welches funktioniert gut. :)

7
Mallow

Der Benutzer Leigh Webber hat auf der Website social.msdn.Microsoft.com VBA-Code veröffentlicht, der eine benutzerfreundliche Schnittstelle für die Zwischenablage implementiert, die die Windows-API verwendet:

http://social.msdn.Microsoft.com/Forums/en/worddev/thread/ee9e0d28-0f1e-467f-8d1d-1a86b2db2878

Sie können Leigh Webbers Quellcode hier

Wenn dieser Link nicht angezeigt wird, suchen Sie im Abschnitt Office Dev Center> Microsoft Office für Entwickler-Foren> Word für Entwickler nach "Ein Zwischenablageobjekt für VBA".

Ich habe die beiden Klassen erstellt, seine Testfälle ausgeführt und es hat in Outlook 2007 SP3 32-Bit-VBA unter Windows 7 64-Bit einwandfrei funktioniert. Es wird höchstwahrscheinlich für Access funktionieren. Tipp: Um Klassen umzubenennen, wählen Sie die Klasse im VBA-Fenster "Projekt" aus, klicken Sie in der Menüleiste auf "Ansicht" und dann auf "Eigenschaftenfenster" (oder drücken Sie einfach F4).

Mit seinen Klassen ist dies erforderlich, um in die/aus der Zwischenablage zu kopieren:

Dim myClipboard As New vbaClipboard  ' Create clipboard

' Copy text to clipboard as ClipboardFormat TEXT (CF_TEXT)    
myClipboard.SetClipboardText "Text to put in clipboard", "CF_TEXT"    

' Retrieve clipboard text in CF_TEXT format (CF_TEXT = 1)
mytxt = myClipboard.GetClipboardText(1)

Er bietet auch andere Funktionen zum Bearbeiten der Zwischenablage.

Es überwindet auch 32 KB MSForms_DataObject.SetText Einschränkung - der Hauptgrund, warum SetText schlägt häufig fehl. Beachten Sie jedoch, dass ich leider keinen Verweis auf Microsoft gefunden habe, der diese Einschränkung erkennt.

-Jim

6
Jim Tonti