Comment copier sur presse-papiers en utilisant Access / VBA?

utilisation de VBA inside Access 2003 / 2007.

Comment copier le contenu d'une variable de chaîne dans le presse-papiers?

ce site recommande de créer une boîte de texte de longueur zéro, de copier la chaîne dans la boîte de texte, puis d'exécuter DoCmd.RunCommand acCmdCopy. Ugh. Je veux dire, on pourrait suivre la route. Mais tout de même. Ugh.

L'article de la base de connaissances MS nous montre comment le faire mais il implique un certain nombre d'appels de L'API Windows. Yuk.

Sont ceux les deux seules options?

33
demandé sur hawbsl 2011-04-05 17:05:03

3 réponses

VB 6 fournit un Clipboard objet qui rend tout cela extrêmement simple et pratique, mais malheureusement ce n'est pas disponible auprès de VBA.

si c'était moi, je prendrais la route de L'API. Il n'y a aucune raison d'avoir peur d'appeler des API natives; la langue vous donne la possibilité de le faire pour une raison.

Toutefois, une alternative plus simple est d'utiliser le DataObject class, qui fait partie de la bibliothèque des formulaires. Je ne recommande cette voie que si vous êtes déjà utiliser les fonctionnalités de la bibliothèque de formulaires de votre application. Ajouter une référence à cette bibliothèque utiliser le presse-papiers semble un peu ridicule.

par exemple, Pour placer du texte sur le presse-papiers, vous pouvez utiliser le code suivant:

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

Ou, pour copier du texte à partir du presse-papiers dans une variable de type string:

Dim clipboard As MSForms.DataObject
Dim strContents As String

Set clipboard = New MSForms.DataObject
clipboard.GetFromClipboard
strContents = clipboard.GetText
57
répondu Cody Gray 2011-04-07 06:44:14

Je n'ai pas pu trouver comment utiliser L'API en utilisant les premiers résultats Google. Heureusement un fil quelque part m'a montré ce lien: http://access.mvps.org/access/api/api0049.htm

ce qui fonctionne bien. :)

7
répondu Mallow 2011-09-25 08:35:43

Utilisateur Leigh Webber sur le social.msdn.microsoft.com site posté code VBA mise en œuvre d'un facile-à-utiliser le presse-papiers de l'interface qui utilise l'API Windows:

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

Vous pouvez obtenir Leigh Webber code source ici

si ce lien ne passe pas, rechercher "un objet presse-papiers pour VBA" dans L'Office Dev Center > Microsoft Office for Forums de développeurs > section Word for Developers.

j'ai créé les deux classes, exécuté ses cas de test, et il a fonctionné parfaitement dans Outlook 2007 SP3 32-bit VBA sous Windows 7 64-bit. Cela fonctionnera très probablement pour L'accès. Astuce: pour renommer les classes, sélectionnez la classe dans la fenêtre VBA 'Project', puis cliquez sur 'View' dans la barre de menu et cliquez sur 'Properties Window' (ou tout simplement sur F4).

avec ses cours, c'est ce qu'il faut pour copier presse-papiers:

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)

Il fournit également d'autres fonctions pour manipuler le presse-papiers.

Il surmonte également 32 KOMSForms_DataObject.SetText limitation - la principale raison pour laquelle SetText échoue souvent. Cependant, gardez à l'esprit que, malheureusement, je n'ai pas trouvé une référence sur Microsoft reconnaissant cette limitation.

-Jim

6
répondu Jim Tonti 2015-03-04 15:57:54