Search code examples
windowsms-accessclipboardvba

How to copy to clipboard using Access/VBA?


Using VBA inside Access2003/2007.

How to copy the contents of a string variable to the clipboard?

This site recommends a creating a zero length TextBox, copying the string to the TextBox, then running DoCmd.RunCommand acCmdCopy. Ugh. I mean, we may go down the route. But still. Ugh.

While the MS knowledgebase article shows us how to do it but it involves a number of Windows API calls. Yuk.

Are those the only two options?


Solution

  • VB 6 provides a Clipboard object that makes all of this extremely simple and convenient, but unfortunately that's not available from VBA.

    If it were me, I'd go the API route. There's no reason to be scared of calling native APIs; the language provides you with the ability to do that for a reason.

    However, a simpler alternative is to use the DataObject class, which is part of the Forms library. I would only recommend going this route if you are already using functionality from the Forms library in your app. Adding a reference to this library only to use the clipboard seems a bit silly.

    For example, to place some text on the clipboard, you could use the following code:

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

    Or, to copy text from the clipboard into a string variable:

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