HOME > 即効テクニック > AccessVBA > Windows環境・オブジェクト > クリップボードへデータを送信する方法

即効テクニック

Windows環境・オブジェクト

クリップボードへデータを送信する方法

(Access 97)
●概要●
VBAを使用して、クリップボードへデータをコピーする方法を説明します。

●準備●
  1. 新規標準モジュールを用意し、以下のプロシージャを記述します。
  2. VBEのメニューから、[表示]−[イミディエイトウィンドウ](Ctrl+G)を選択し、イミディエイトウィンドウを表示させておきます。 ※Access97の場合はデバッグウィンドウになりますので、以後読み替えて下さい。
●サンプルコード● 'Win32API宣言部 Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long _ ) As Long Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long _ ) As Long Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, _ ByVal dwBytes As Long _ ) As Long Declare Function CloseClipboard Lib "User32" () As Long Declare Function OpenClipboard Lib "User32" (ByVal hwnd As Long _ ) As Long Declare Function EmptyClipboard Lib "User32" () As Long Declare Function lstrcpy Lib "kernel32" (ByVal lpString1 As Any, _ ByVal lpString2 As Any _ ) As Long Declare Function SetClipboardData Lib "User32" (ByVal wFormat As Long, _ ByVal hMem As Long _ ) As Long 'パブリック定数宣言 Public Const GHND = &H42 Public Const CF_TEXT = 1 Public Const MAXSIZE = 4096 Public Function SetClipBoard(MyString As String) Dim hGlobalMemory As Long Dim lpGlobalMemory As Long Dim hClipMemory As Long Dim X As Long '移動可能なグローバルメモリを割り当て hGlobalMemory = GlobalAlloc(GHND, LenB(MyString) + 1) 'ブロックをロックして、メモリへのfarポインタを取得 lpGlobalMemory = GlobalLock(hGlobalMemory) '文字列をグローバルメモリへコピー lpGlobalMemory = lstrcpy(lpGlobalMemory, MyString) 'メモリのロックを解除します。 If GlobalUnlock(hGlobalMemory) <> 0 Then MsgBox "メモリのロックを解除できません" & vbCrLf & _ "処理が失敗しました" GoTo OutOfHere2 End If 'データをコピーするクリップボードを開く If OpenClipboard(0&) = 0 Then MsgBox "クリップボードを開くことができません" & vbCrLf & _ "処理が失敗しました" Exit Function End If ' クリップボードの内容を消去 X = EmptyClipboard() ' データをクリップボードへコピー hClipMemory = SetClipboardData(CF_TEXT, hGlobalMemory) OutOfHere2: クリップボードの状態チェック If CloseClipboard() = 0 Then MsgBox "クリップボードを閉じることができません" End If End Function ●動作確認● イミディエイトウィンドウに以下のように入力して、Enter キーを押します。 ------------------------------------------- ? SetClipBoard("データコピーできた?") ------------------------------------------- ※「?」=Debug.Print イミディエイトウィンドウや、テキストエディタなどのテキストエリアで貼り付け(Ctrl+V)を行うと、上記SSetClipBoard引数の文字列が貼り付けられ、クリップボードにデータが送信できていることを確認できます。