Comment copier dans le presse papier avec Access / VBA?

Utilisation de VBA dans Access2003 / 2007.

Comment copier le contenu d’une variable de chaîne dans le presse-papier?

Ce site recommande de créer une DoCmd.RunCommand acCmdCopy longueur nulle, en copiant la chaîne dans la DoCmd.RunCommand acCmdCopy , puis en exécutant DoCmd.RunCommand acCmdCopy . Pouah. Je veux dire, nous pouvons suivre la route. Mais rest. Pouah.

Alors que l’article de la base de connaissances MS nous montre comment le faire, il implique un certain nombre d’appels d’API Windows. Yuk.

Est-ce que ce sont les deux seules options?

VB 6 fournit un object Clipboard qui rend tout cela extrêmement simple et pratique, mais malheureusement, ce n’est pas disponible chez VBA.

Si c’était moi, je passerais par 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.

Cependant, une alternative plus simple consiste à utiliser la classe DataObject , qui fait partie de la bibliothèque Forms. Je vous recommande uniquement d’utiliser cette route si vous utilisez déjà des fonctionnalités de la bibliothèque Forms de votre application. L’ajout d’une référence à cette bibliothèque uniquement pour utiliser le presse-papiers semble un peu idiot.

Par exemple, pour placer du texte dans le Presse-papiers, vous pouvez utiliser le code suivant:

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

Ou, pour copier du texte du presse-papiers dans une variable de chaîne:

 Dim clipboard As MSForms.DataObject Dim strContents As Ssortingng Set clipboard = New MSForms.DataObject clipboard.GetFromClipboard strContents = clipboard.GetText 

Je n’ai pas compris comment utiliser l’API en utilisant les premiers résultats de Google. Heureusement, un fil quelque part m’a orienté vers ce lien: http://access.mvps.org/access/api/api0049.htm

Ce qui fonctionne bien 🙂

L’utilisateur Leigh Webber sur le site social.msdn.microsoft.com a publié du code VBA implémentant une interface de Presse-papiers conviviale utilisant l’API Windows:

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

Vous pouvez obtenir le code source de Leigh Webber ici

Si ce lien ne passe pas, recherchez «un object Presse-papiers pour VBA» dans la section Centre de développement Office> Microsoft Office pour développeurs> Word pour développeurs.

J’ai créé les deux classes, exécuté ses scénarios de test et cela a parfaitement fonctionné dans VBA Outlook 2007 SP3 32 bits sous Windows 7 64 bits. Cela fonctionnera très probablement pour Access. Conseil: pour renommer les classes, sélectionnez la classe dans la fenêtre “Projet” de VBA, puis cliquez sur “Afficher” dans la barre de menus et cliquez sur “Fenêtre Propriétés” (ou appuyez simplement sur F4).

Avec ses cours, voici ce qu’il faut pour copier vers / depuis le presse-papier:

 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" ' Resortingeve 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 la limitation MSForms_DataObject.SetText 32KB – la principale raison pour laquelle SetText échoue souvent. Toutefois, sachez que je n’ai malheureusement pas trouvé de référence sur Microsoft en reconnaissant cette limitation.

-Jim