Jak skopiować do schowka za pomocą Access / VBA?

Używanie VBA wewnątrz Access2003/2007.

Jak skopiować zawartość zmiennej łańcuchowej do schowka?

Ta strona zaleca utworzenie pola tekstowego o zerowej długości, skopiowanie łańcucha do pola tekstowego, a następnie uruchomienie DoCmd.RunCommand acCmdCopy. Ugh. Może pójdziemy tą drogą. Ale jednak. Ugh.

Podczas gdy artykuł bazy wiedzy MS pokazuje nam, jak to zrobić, ale obejmuje szereg wywołań Windows API. Yuk.

Czy to jedyne dwie opcje?
Author: hawbsl, 2011-04-05

3 answers

VB 6 dostarcza Clipboard obiekt, który sprawia, że wszystko to jest niezwykle proste i wygodne, ale niestety nie jest to dostępne z VBA.

Gdybym to był ja, poszedłbym drogą API. Nie ma powodu, aby bać się wywoływania natywnych interfejsów API; język zapewnia Ci możliwość robienia tego nie bez powodu.

Jednak prostszą alternatywą jest użycie klasy DataObject, która jest częścią biblioteki Forms. Polecam tą trasę tylko jeśli już korzystasz z funkcjonalności z biblioteki formularzy w aplikacji. Dodanie odniesienia do tej biblioteki tylko do korzystania ze schowka wydaje się nieco głupie.

Na przykład, aby umieścić jakiś tekst w schowku, możesz użyć następującego kodu:

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

Lub, aby skopiować tekst ze schowka do zmiennej łańcuchowej:

Dim clipboard As MSForms.DataObject
Dim strContents As String

Set clipboard = New MSForms.DataObject
clipboard.GetFromClipboard
strContents = clipboard.GetText
 57
Author: Cody Gray,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-07 06:44:14

Nie mogłem rozgryźć, Jak korzystać z API, korzystając z pierwszych wyników Google. Na szczęście jakiś wątek gdzieś wskazał mi ten link: http://access.mvps.org/access/api/api0049.htm

Który działa ładnie. :)

 7
Author: Mallow,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-25 08:35:43

Użytkownik Leigh Webber na social.msdn.microsoft.com strona opublikowała kod VBA implementujący łatwy w użyciu interfejs schowka, który korzysta z Windows API:

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

Możesz pobrać kod źródłowy Leigh Webber tutaj

Jeśli ten link nie przejdzie, wyszukaj "obiekt schowka dla VBA" w Office Dev Center > Microsoft Office for Developers Forums > Word for Dział programistów.

Stworzyłem dwie klasy, uruchomiłem jego przypadki testowe i działało idealnie wewnątrz Outlook 2007 SP3 32-bit VBA pod Windows 7 64-bit. Najprawdopodobniej zadziała na dostęp. Wskazówka: aby zmienić nazwę klas, wybierz klasę w oknie "projekt" VBA, a następnie kliknij "Widok" na pasku menu i kliknij "okno Właściwości" (lub po prostu naciśnij F4).

Z jego klasami, to jest to, co trzeba skopiować do / ze schowka:

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)

On również zapewnia inne funkcje dla manipulowanie schowkiem.

Pokonuje również 32KB MSForms_DataObject.Ograniczenie SetText - główny powód, dla którego SetText często zawodzi. Należy jednak pamiętać, że, niestety, nie znalazłem odniesienia Na Microsoft uznając to ograniczenie.

- Jim

 6
Author: Jim Tonti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-04 15:57:54