windows - Sådan kopieres til udklipsholder ved hjælp af Access/VBA?

Indlæg af Hanne Mølgaard Plasc

Problem



Brug af VBA inden Access2003/2007.


Hvordan kopieres indholdet af en strengvariabel til udklipsholderen?


Dette websted anbefaler, at du opretter en tekstboks med nullængde, kopierer strengen til tekstboksen og kører derefter DoCmd.RunCommand acCmdCopy. UH. Jeg mener, vi kan gå ned ad ruten. Men stadig. UH. [7]


Mens MS Knowledge Base-artiklen viser os, hvordan man gør det, men det indebærer en række Windows API-opkald. Yuk. [8]


Er de de eneste to muligheder?

Bedste reference


VB 6 giver et Clipboard objekt, der gør alt dette ekstremt enkelt og bekvemt, men desværre er det ikke tilgængeligt fra VBA.


Hvis det var mig, ville jeg gå API-ruten. Der er ingen grund til at være bange for at ringe til native API'er; Sproget giver dig mulighed for at gøre det af en grund.


Et enklere alternativ er dog at bruge klassen DataObject, som er en del af Forms-biblioteket. Jeg vil kun anbefale at gå denne rute, hvis du allerede bruger funktionalitet fra Forms-biblioteket i din app. Tilføjelse af en henvisning til dette bibliotek kun for at bruge udklipsholderen virker lidt dumt.


For eksempel at placere nogle tekst på udklipsholderen, kan du bruge følgende kode:


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


Eller til at kopiere tekst fra udklipsholderen til en strengvariabel:


Dim clipboard As MSForms.DataObject
Dim strContents As String

Set clipboard = New MSForms.DataObject
clipboard.GetFromClipboard
strContents = clipboard.GetText

Andre referencer 1


Jeg kunne ikke finde ud af, hvordan du bruger API'en ved hjælp af de første Google-resultater. Heldigvis pegede en tråd et sted mig på dette link:
http://access.mvps.org/access/api/api0049.htm[9]


Hvilket virker pænt. :)

Andre referencer 2


Bruger Leigh Webber på social.msdn.microsoft.com har postet VBA kode, der implementerer et brugervenligt udklipsholder interface, der bruger Windows API:


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


Du kan få Leigh Webbers kildekode her [11]


Hvis dette link ikke går igennem, skal du søge efter 'Et udklipsholderobjekt til VBA' i Office Dev Center> Microsoft Office for Developers Forums> Word for Developers.


Jeg skabte de to klasser, løb sine test cases, og det fungerede perfekt indenfor Outlook 2007 SP3 32-bit VBA under Windows 7 64-bit. Det vil højst sandsynligt fungere for Access.
Tip: For at omdøbe klasser skal du vælge klassen i vinduet VBA 'Projekt' og derefter klikke på 'Vis' i menulinjen og klikke på 'Egenskaber Vindue' (eller bare trykke F4).


Med sine klasser er dette det, der kræves for at kopiere til/fra udklipsholderen:


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)


Han giver også andre funktioner til at manipulere udklipsholderen.


Det overvinder også 32KB MSForms\_DataObject.SetText begrænsning - hovedårsagen til, at SetText ofte fejler. Men husk på, at jeg desværre ikke har fundet en henvisning til Microsoft, der anerkender denne begrænsning.


-Jim