t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

VBA クリップボードから安全にテキストを取得する方法

VBAで扱えるクリップボードには2種類あり、ひとつはOfficeクリップボード、もうひとつはWindowsクリップボードである。

今回はWindowsクリップボードを安全に扱う方法を解説する。
わざわざ安全にと書くのは、昨日クリップボード処理のマクロを書いていてハマったので。
(何度やってもExcelがクラッシュしてしまった。)

さて、クリップボードを扱うためには、VBEのツール→参照設定からMS Forms 2.0 Object Libraryを参照する必要がある。
f:id:t-hom:20151121080116p:plain

面倒であれば、一度フォームモジュールを挿入すれば自動的に参照設定される。
(フォームは使わなければ消して良い。)

次にコードを書く

Sub hoge()
    Dim CB As New DataObject
    CB.GetFromClipboard
    If CB.GetFormat(1) Then
        MsgBox CB.GetText
    Else
        MsgBox "クリップボードにテキストデータがありません"
    End If
End Sub

重要なのはこのIf文↓

If CB.GetFormat(1) Then

このGetFormatプロパティの引数 1 はテキスト形式を表す定数で、もしテキストが入っていない状態でGetTextメソッドを呼ぶと、実行時エラーが発生する。
f:id:t-hom:20151121080935p:plain

このIf文を入れるまでは、メインマシン(Win10, Excel2013)ではエラーで済んだけど、サブマシン(Win7, Excel2010)ではクリップボードを使用するマクロを実行するたびにExcelがクラッシュして大変だった。

VBAクリップボードからテキストデータを取得する際は、忘れずに必ずフォーマット判定を行うべし。

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。