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引数の文字列が貼り付けられ、ク
リップボードにデータが送信できていることを確認できます。
|