web-dev-qa-db-ja.com

Access / VBAを使用してクリップボードにコピーする方法は?

Access2003/2007内でVBAを使用します。

文字列変数の内容をクリップボードにコピーする方法は?

このサイト 長さゼロのTextBoxを作成し、文字列をTextBoxにコピーしてから、DoCmd.RunCommand acCmdCopy。あーつまり、我々はルートを行くかもしれません。それでも。あー.

MSナレッジベース記事 はその方法を示していますが、多くのWindows API呼び出しが含まれています。ユク。

これらは2つだけのオプションですか?

34
hawbsl

VB 6にはClipboardオブジェクトが用意されており、このすべてが非常にシンプルで便利ですが、残念ながらVBAからは利用できません。

それが私だったら、APIルートに行きます。ネイティブAPIを呼び出すことを恐れる理由はありません。この言語は、理由があるためにそれを行う能力を提供します。

ただし、より簡単な代替方法は、Formsライブラリの一部であるDataObjectクラスを使用することです。アプリで既にフォームライブラリの機能を使用している場合にのみ、この方法をお勧めします。このライブラリへの参照を追加するonlyを使用してクリップボードを使用するのは少しばかげているようです。

たとえば、クリップボードにテキストを配置するには、次のコードを使用できます。

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

または、クリップボードからテキストを文字列変数にコピーするには:

Dim clipboard As MSForms.DataObject
Dim strContents As String

Set clipboard = New MSForms.DataObject
clipboard.GetFromClipboard
strContents = clipboard.GetText
57
Cody Gray

最初のGoogleの結果を使用してAPIを使用する方法がわかりませんでした。幸いなことに、どこかのスレッドが次のリンクを示してくれました。 http://access.mvps.org/access/api/api0049.htm

うまく機能します。 :)

7
Mallow

Social.msdn.Microsoft.comサイトのユーザーLeigh Webberが、Windows APIを使用する使いやすいクリップボードインターフェイスを実装するVBAコードを投稿しました。

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

Leigh Webberのソースコードはこちら を取得できます

このリンクが通らない場合は、Officeデベロッパーセンター>開発者向けMicrosoft Officeフォーラム>開発者向けWordセクションで「VBAのクリップボードオブジェクト」を検索してください。

2つのクラスを作成し、彼のテストケースを実行したところ、Windows 7 64ビットのOutlook 2007 SP3 32ビットVBA内で完全に機能しました。ほとんどの場合、Accessで機能します。ヒント:クラスの名前を変更するには、VBAの[プロジェクト]ウィンドウでクラスを選択し、メニューバーの[表示]をクリックして、[プロパティウィンドウ]をクリックします(またはF4を押します)。

彼のクラスでは、これはクリップボードとの間でコピーするために必要なものです:

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)

また、クリップボードを操作するためのその他の機能も提供しています。

また、32KBMSForms_DataObject.SetText制限-主な理由SetTextはしばしば失敗します。ただし、残念ながら、Microsoftがこの制限を認識しているとの言及は見つかりませんでした。

-ジム

6
Jim Tonti