Access2003/2007内でVBAを使用します。
文字列変数の内容をクリップボードにコピーする方法は?
このサイト 長さゼロのTextBoxを作成し、文字列をTextBoxにコピーしてから、DoCmd.RunCommand acCmdCopy
。あーつまり、我々はルートを行くかもしれません。それでも。あー.
MSナレッジベース記事 はその方法を示していますが、多くのWindows API呼び出しが含まれています。ユク。
これらは2つだけのオプションですか?
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
最初のGoogleの結果を使用してAPIを使用する方法がわかりませんでした。幸いなことに、どこかのスレッドが次のリンクを示してくれました。 http://access.mvps.org/access/api/api0049.htm
うまく機能します。 :)
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がこの制限を認識しているとの言及は見つかりませんでした。
-ジム