クリップボードを操作する


クリップボードに格納されている形式を調べる

クリップボードに、どんな形式のデータが格納されているかは、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がクリップボードとやり取りをするために必要となる「橋渡し役」のような存在です。