クリップボードにデータ形式があるか調べる
クリップボードの形式数を読み、ゼロ件か、何らかのデータがあるかを確認します。
実行前に確認
- 形式数はコピーした件数ではありません。1回のコピーでも文字・HTMLなど複数形式を持つことがあります。
- 現在のクリップボードだけを調べ、Windowsのクリップボード履歴は調べません。別アプリにより直後に内容が変わる場合があります。
- 公式仕様とコードを照合した例です。Excel実機での実行は未検証です。業務ブックではなくコピーで試してください。
1サンプルコード
Option Explicit
Private Declare PtrSafe Function CountClipboardFormats Lib "user32" () As Long
Private Declare PtrSafe Sub SetLastError Lib "kernel32" (ByVal errorCode As Long)
Sub PracticeAdvanced8046()
Dim count As Long, errorCode As Long
SetLastError 0
count = CountClipboardFormats()
errorCode = Err.LastDllError
If count = 0 And errorCode <> 0 Then
MsgBox "形式数を取得できません。Windowsエラー: " & errorCode
ElseIf count = 0 Then
MsgBox "クリップボードの形式数は0です。"
Else
MsgBox "データがあります。形式数: " & count
End If
End Sub図で見る操作の流れ
イメージ図準備、実行する操作、確認する結果の順で示しています。
準備
Windows版VBA7の32/64ビット用です。最初はメモ帳で練習用の文字をコピーしておきます。
操作
クリップボードの形式数を読み、ゼロ件か、何らかのデータがあるかを確認します。
結果
データがある場合は形式数が表示されます。0件とAPIエラーは分けて表示します。
形式数はコピーした件数ではありません。1回のコピーでも文字・HTMLなど複数形式を持つことがあります。
コードの処理を説明する模式図です。実際の画面や実行結果を撮影したものではありません。
使い方・実行手順を確認する4つの手順で、コードの使い方を確認できます
- 1
Windows版デスクトップExcelの練習用ブックを.xlsmで保存し、Alt+F11→[挿入]→[標準モジュール]へ、この例だけを貼り付けます。
- 2
Windows版VBA7の32/64ビット用です。最初はメモ帳で練習用の文字をコピーしておきます。
- 3
PracticeAdvanced8046を実行します。クリップボードの内容自体は取り出しません。
- 4
データがある場合は形式数が表示されます。0件とAPIエラーは分けて表示します。