VBAで扱えるクリップボードには2種類あり、ひとつはOfficeクリップボード、もうひとつはWindowsのクリップボードである。
今回はWindowsのクリップボードを安全に扱う方法を解説する。
わざわざ安全にと書くのは、昨日クリップボード処理のマクロを書いていてハマったので。
(何度やってもExcelがクラッシュしてしまった。)
さて、クリップボードを扱うためには、VBEのツール→参照設定からMS Forms 2.0 Object Libraryを参照する必要がある。
面倒であれば、一度フォームモジュールを挿入すれば自動的に参照設定される。
(フォームは使わなければ消して良い。)
次にコードを書く
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メソッドを呼ぶと、実行時エラーが発生する。
このIf文を入れるまでは、メインマシン(Win10, Excel2013)ではエラーで済んだけど、サブマシン(Win7, Excel2010)ではクリップボードを使用するマクロを実行するたびにExcelがクラッシュして大変だった。