【VBA×WindowsAPI】EmptyClipboard関数の使い方

EmptyClipboard関数

EmptyClipboard関数はクリップボード内のデータを空にする関数です。
主にSetClipboardData関数のようなクリップボード内にデータを設定する関数と併用し、データのセット直前にクリップボードを”初期化する”というようなかたちで利用されます。

この関数はOpenClipboard関数を使ってクリップボードを開いた(アクセスできるようにした)ところから、CloseClipboard関数でクリップボードを閉じるまでの範囲でのみ有効です。この範囲外で実行しても失敗の戻り値「NULL(0)」が返ってくるだけで何も処理はされません。

OpenClipboard関数を実行してクリップボードが開かれるとき、クリップボードは他のアプリケーションが内容を変更できないようにして開かれます。これによりプログラム(VBA)でクリップボード内の操作を行うときにプログラム外部でクリップボードの操作が行われても影響を受けることが無いようになっています。ただし、プログラム終了時には必ずCloseClipboard関数を使ってクリップボードを閉じる必要があります。(※他のアプリケーションがクリップボードにアクセスできないままになります)

クリップボード関連の関数としては下記のような様々な関数が存在しています。

関数名 内容
OpenClipboard関数 クリップボードを開く
CloseClipboard関数 クリップボードを閉じる
EmptyClipboard関数 クリップボード内のデータを空にする
GetClipboardData関数 クリップボード内のデータを取得する
SetClipboardData関数 クリップボード内にデータをセットにする
IsClipboardFormatAvailable関数 クリップボード内のデータのフォーマットを調べる

実際にクリップボードとデータのやり取りをするコードを書く際は、これら関数だけでなくメモリを操作する系の関数(GlobalAlloc関数やMoveMemory関数など)と合わせて利用されることが多いです。

 

使用方法

EmptyClipboard関数を使用するにはあらかじめ関数の宣言しておく必要があります。
※宣言をしないと関数は使えずにエラーとなるので書き忘れに注意しましょう。

使用しているWindowsが32bitか64bitかによって宣言時に書く文言が違います。
環境に合わせて以下のいずれかをコードの一番初め(Option Explicitの次の行あたり)に書いておくことで、そのモジュール内で各関数を使うことができるようになります。

 icon-code  64bit  

Declare PtrSafe Function EmptyClipboard Lib “user32” () As Long

icon-code  32bit  

Declare Function EmptyClipboard Lib “user32” () As Long

上記のどちらを書けばいいかわからない場合は以下のコードをコピペして、モジュールの最上部に書いておきましょう。この構文を書いておくことで自動的に使うことのできる方の構文が使用されます。
VBE上では使えない方の構文が赤色で表示される場合がありますが、実行に影響はありません。

 
各関数の宣言文は「Private/Public」を付けて各関数の有効範囲を指定することもできます。

Private Declare PtrSafe Function~ :モジュール内でのみ呼び出し有効
Public Declare PtrSafe Function~ :モジュール外で呼び出し有効

 
 

構文

EmptyClipboard関数の構文は下記のように書きます。
※この関数を使うには事前にOpenClipboard関数でクリップボードを開いておく必要があります。

icon-code EmptyClipboard関数 

lRet = EmptyClipboard

戻り値

 lRet   (Long型) 

戻り値は関数が成功した場合は「0以外」です。
失敗した場合は「0」が返されます。

 

サンプルコード

以下はEmptyClipboard関数OpenClipboard関数CloseClipboard関数を使って、クリップボード内のデータを空にするサンプルコードです。クリップボード内のデータを取得したり、クリップボードに別のデータをセットしたりする操作はもっと複雑になりますが、処理のはじめにOpenClipboard関数でクリップボードを開き、終わりにCloseClipboard関数でクリップボードを閉じる流れは同じです。

 

 icon-share-square  VBA×WindowsAPIまとめページ

その他のWindowsAPI関数は下記ページにまとまっているので合わせて参照下さい。

 icon-share-square  参考

Microsoft公式:EmptyClipboard 関数 (winuser.h) – Win32 apps

Excel, VBA, Windows API

Posted by Lic