クリップボードに、どんな形式のデータが格納されているかは、ApplicationオブジェクトのClipboardFormatsプロパティで判定できます。ClipboardFormatsプロパティは、クリップボードに格納されているデータ形式を配列で返します。クリップボードに何もデータが格納されていない場合は、ClipboardFormats(1)にTrue(-1)が入ります。
クリップボードにどんな形式のデータが格納されているかは、ClipboardFormatsプロパティが返す配列の要素と定数を比較します。次のサンプルは、クリップボードに画像が格納されていたらワークシートに貼り付けます。
Sub Sample() Dim CB As Variant, i As Long CB = Application.ClipboardFormats If CB(1) = True Then MsgBox "クリップボードは空です。", 48 Exit Sub End If For i = 1 To UBound(CB) If CB(i) = xlClipboardFormatBitmap Then ActiveSheet.Paste Exit For End If Next i End Sub
ClipboardFormatsプロパティで使用できる定数は、ヘルプをご覧ください。
CopyメソッドやPasteメソッドはセルが対象です。セルを使わずに、変数のデータをクリップボードに格納したり、クリップボードに格納されているデータを直接変数に入れるときにはDataObjectオブジェクトを使います。
DataObjectオブジェクトはMSFormsのメンバです。使用するには、Microsoft Forms 2.0 Object Libraryを参照設定します。または、ブックにUserFormを挿入すると自動的に参照設定されます。
次のサンプルは、変数bufの文字列「tanaka」をクリップボードに格納します。続いて、クリップボードのデータを変数buf2に取得します。
Sub Sample2() Dim buf As String, buf2 As String, CB As New DataObject buf = "tanaka" With CB .SetText buf ''変数のデータをDataObjectに格納する .PutInClipboard ''DataObjectのデータをクリップボードに格納する .GetFromClipboard ''クリップボードからDataObjectにデータを取得する buf2 = .GetText ''DataObjectのデータを変数に取得する End With MsgBox buf2 End Sub
DataObjectオブジェクトは、Windowsの機能であるクリップボード本体ではありません。VBAがクリップボードとやり取りをするために必要となる「橋渡し役」のような存在です。