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


※ここで解説するテクニックは、Internet Explorerを使った方法です。Excel VBAでは標準機能だけでクリップボードを操作することも可能です。Excel VBAの標準機能を使う方法と、若干の制限に関しては「クリップボードを操作する(1)」をご覧ください。

Internet Explorerにはクリップボードを操作する機能が実装されていますので、オートメーションでInternet Explorerのインスタンスを利用すれば、クリップボードの読み書きを行えます。ここではその方法と、Internet Explorer7.0での注意点を解説します。

Internet Explorerを利用してクリップボードを操作するには次のようにします。次のコードは、クリップボードの内容をクリアし、新しいテキストをセットした後に、格納されているテキストを取り出します。

Sub Sample1()
    Dim IE, cbText As String
    Set IE = CreateObject("InternetExplorer.Application")
    IE.Navigate "about:blank"
    Do While IE.Busy Or IE.Document.ReadyState <> "complete"
        DoEvents
    Loop
    ''ClipBoardの内容をクリアする
    IE.Document.ParentWindow.ClipboardData.ClearData "text"
    
    ''ClipBoardに文字列をセットする
    IE.Document.ParentWindow.ClipboardData.SetData "text", "We are REDS!!"
    ''ClipBoardの文字列を取得する
    cbText = IE.Document.ParentWindow.ClipboardData.GetData("text")
    
    IE.Quit
    Set IE = Nothing
    MsgBox cbText
End Sub

それほど難しくありませんね。

しかし、上記のコードをInternet Explorer7.0で実行するときは注意が必要です。

Internet Explorerはクリップボードを操作する機能があります。ということは、悪意を持ったページに「クリップボードのデータを盗み見」するスクリプトを仕込まれていると、クリップボードにコピーした情報が丸見えになってしまうのです。これはマズイです。そこで新しいInternet Explorer7.0では、スクリプトがクリップボードを操作しようとすると、次のような警告ダイアログボックスが表示される機能が追加されました。

上記のコード(Sample1)では、IE.Visible = True としていませんのでInternet Explorerは表示されません。表示されていないInternet Explorer上では(見えない)「許可しますか?」ダイアログボックスが表示されたままで停止します。クリップボードの内容をクリアしようとしたClearDataメソッドは、いつまでたっても完了しないので、ハングアップした状態になります。実際に試してみました。

Internet Explorer7.0では、こうした"スクリプトによるクリップボードへのアクセス"に対して3つのオプションが用意されています。

「スクリプトによる貼り付け処理の許可」がそれです。

ただし現在はまだベータ版ですので、製品版ではオプションの名称が変わるかもしれません。

「有効にする」を選択すると、従来のようにスクリプトから自由にクリップボードを操作できます。

「無効にする」では、スクリプトからのクリップボード操作は一切禁止されます。

「ダイアログを表示する」がオンになっていると、上で解説したように「許可しますか?」ダイアログボックスが表示されます。そして、これはまだベータ版での確認に過ぎませんが、標準では「ダイアログを表示する」がオンになるようです。

Internet Explorerを7.0にバージョンアップしたとたん、今まで動いていたスクリプトでエラーにならないように、今のうちからチェックされた方がいいでしょう。