hakeの日記

Windows環境でプログラミングの勉強をしています。

EXCEL VBAメモ - クリップボードのアクセス

クリップボードへのアクセスは、DataObjectを介して行う。
またクリップボードが空か否か、どんなデータが入っているかの確認はApplication.ClipboardFormatsを使用する。

' クリップボードからテキストを読み出す
Sub getTextFromClipBoard()
    Dim i As Long
    Dim buf As String

    ' クリップボードを中継するオブジェクト
    Dim CBrd As New DataObject
    ' クリップボードの状態を確認する
    Dim CBFmt As Variant: CBFmt = Application.ClipboardFormats
    Dim isText As Boolean: isText = False

    If CBFmt(1) = True Then
        MsgBox "クリップボードは空です"
        Exit Sub
    Else
'        MsgBox "UBound(CBFmt) = " & UBound(CBFmt)
'        For i = 1 To UBound(CBFmt)
'            MsgBox TypeName(CBFmt(i))
'        Next

        ' クリップボード内のデータ種別の確認
        For i = 1 To UBound(CBFmt)
            ' https://msdn.microsoft.com/ja-jp/library/office/ff839748.aspx
            If CBFmt(i) = xlClipboardFormatText Then isText = True: Exit For
        Next
        
        ' テキスト取り出し
        If isText Then
            CBrd.GetFromClipboard
            buf = CBrd.GetText
            MsgBox buf
        Else
            MsgBox "テキストではありません"
        End If
    End If

    Set CBrd = Nothing
End Sub

' クリップボードへテキストをセット
Sub putTextToClipBoard()
    Dim buf As String
    Dim CBrd As New DataObject
    
    buf = "あいうえお"
    CBrd.SetText buf
    CBrd.PutInClipboard
    
    Set CBrd = Nothing
End Sub