クリップボードとのインターフェース

エクセルの中で .Copyで内部的なクリップボードに入れて、.PasteSpecialするのは簡単です。では、エクセルではなく別アプリで使えるようにクリップボードに入れるにはどうしたらいいでしょうか。セルの内容を.Copyすれば別アプリでもアクセスできるので問題解決ですか? では、文字列変数の中身をクリップボードにコピーしたい場合、一旦どこかのセルに文字列をセットしないと.Copyできないですよね? その逆も同じです。セルに.PasteSpecialしないとデータにアクセスできないのでは不便です。

 

エクセルのVBAにはクリップボードを扱うオブジェクトがないので、”Microsoft Forms 2.0 Object Library”というライブラリをツールメニュー▶▶参照設定する必要があります。F2でオブジェクトブラウザを表示させて、DataObjectを検索してみてください。Clear、GetFormat、GetFromClipboard、GetText、PutInClipboard、SetText、StartDragといったメンバーがあることが分かると思います。

 

以下のコードはクリップボードへのデータセットとコピーのサンプルです。

使用例:

Dim buff As String

buff = GetHTMLText("www.yahoo.co.jp")
CB_SetText buff
  
Public Sub CB_SetText(pBuffer As String)
    Dim oClip As DataObject
    Set oClip = New DataObject
    oClip.clear
    oClip.SetText pBuffer
    oClip.PutInClipboard
End Sub

Public Function CB_GetText() As String
    Dim oClip As DataObject
    Set oClip = New DataObject
    oClip.GetFromClipboard
    CB_GetText = oClip.GetText()
End Function