【入門編】【クリップボード連携】htmlfile (MSHTML) オブジェクトを経由したテキストのクリップボード読み書きテクニック – VBScript (Visual Basic Scripting Edition)解析バイブル

スポンサーリンク

こんにちは。業務自動化の現場でVBScriptと長年向き合ってきたエンジニアです。

今日は、VBScriptの限界を突破する「裏ワザ」を伝授しましょう。VBScriptを触っていると、必ずと言っていいほど直面する壁があります。それは「クリップボードとの連携ができない」という悩みです。

通常、VBScriptにはクリップボードを操作する標準メソッドが存在しません。しかし、Windows環境には強力な「武器」が隠されています。それが `htmlfile` オブジェクトです。これを使えば、ブラウザのエンジンを借りることで、驚くほどスマートにクリップボードを掌握できるのです。

なぜ「htmlfile」なのか?:オブジェクトの裏口を使う

VBScriptは「COM(Component Object Model)」という仕組みを通じて、Windows内の様々な機能を呼び出します。`htmlfile` は本来、Internet Explorerが使用するHTML解析エンジンですが、これには「クリップボードへのアクセス権」という非常に便利なメソッドが備わっています。

これを利用することで、余計なライブラリをインストールせずとも、標準機能だけでクリップボードの読み書きが可能になるわけです。

クリップボード操作の極意:実装コード

まずは、何も言わずにこのコードを見てください。これが「クリップボードを掌握する」ための最短かつ最も安定した経路です。

テキストをクリップボードに書き込む(SetText)

‘ クリップボードに文字列を送信する関数
Sub SetClipboard(strText)
‘ htmlfileオブジェクトを作成
Dim objHTML
Set objHTML = CreateObject(“htmlfile”)

‘ parentWindow.clipboardData.setData でクリップボードに書き込み
‘ 第1引数は “text” 固定
objHTML.parentWindow.clipboardData.setData “text”, strText

Set objHTML = Nothing
End Sub

‘ 使用例
SetClipboard “このテキストがクリップボードにコピーされました!”

クリップボードからテキストを読み込む(GetText)

‘ クリップボードから文字列を取得する関数
Function GetClipboard()
Dim objHTML
Set objHTML = CreateObject(“htmlfile”)

‘ getData でクリップボードからデータを取得
GetClipboard = objHTML.parentWindow.clipboardData.getData(“text”)

Set objHTML = Nothing
End Function

‘ 使用例
MsgBox “クリップボードの内容: ” & GetClipboard()

現場で役立つエンジニアの知見

このコードを使う際、いくつか押さえておくべき「現場の注意点」があります。これを守らないと、バグに泣くことになります。

1. 「空のクリップボード」への対策

`getData` を実行した際、クリップボードが空だとエラーになることがあります。実務では、以下のようにエラー制御を入れるのが大人のエンジニアです。

Function GetClipboardSafe()
On Error Resume Next ‘ エラーを無視する設定
Dim objHTML
Set objHTML = CreateObject(“htmlfile”)
GetClipboardSafe = objHTML.parentWindow.clipboardData.getData(“text”)

‘ もしデータが空なら、空文字を返す
If Err.Number <> 0 Then GetClipboardSafe = “”
On Error GoTo 0
End Function

2. オブジェクトの解放を忘れない

`Set objHTML = Nothing` を必ず最後に入れましょう。VBScriptはメモリ管理が自動ですが、COMオブジェクトを連続して生成すると、Windowsのメモリ領域が圧迫されます。特にループ処理の中で使う場合は必須です。

なぜこれが「強力」なのか

世の中には `Clip.exe` を使ったり、外部のコマンドラインツールを呼び出す手法もあります。しかし、それらは「外部依存」であり、セキュリティポリシーが厳しい企業環境では実行できないことが多いのです。

今回紹介した `htmlfile` を経由する手法は、Windowsが標準で持っているコンポーネントのみを使用するため、どのPCでも確実に動作します。 これこそが、業務自動化エンジニアが「環境に依存しない堅牢なツール」を作るための極意なのです。

さあ、次のステップへ

このクリップボード操作をマスターすれば、こんなことができます。

  • Excelからコピーしたデータを、VBScriptで加工して別のアプリに貼り付ける
  • ブラウザから取得したIDを自動でコピーし、社内システムへ流し込む
  • ログファイルから特定の行をクリップボードへ自動転送する

VBScriptは古い言語と言われますが、こうした「隙間」を埋める能力においては今なお最強です。まずはこのコードをコピーして、ご自身の環境で動かしてみてください。「動いた!」という感動が、あなたの自動化エンジニアとしての第一歩です。

何か詰まったら、いつでも聞いてくださいね。応援しています!

タイトルとURLをコピーしました