機能と数式 | VBA | セミナー | オンラインソフト | お問い合わせ | その他
Top > Excel > VBA

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



※ここで解説するテクニックは、Excel VBAの機能だけを使います。クリップボードを操作するには、ほかにもInternet Explorerを使う方法もあります。Internet Explorerを使うやり方と、その際の注意点に関しては「クリップボードを操作する(2)」をご覧ください。

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


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





このエントリーをはてなブックマークに追加