概要
ClipTextは、指定した文字列をクリップボードへ格納するためのExcel VBA汎用プロシージャです。
引数Textに渡した文字列を一時的なForms.TextBox.1へ入れ、全選択して.Copyすることで、VBAから文字列をコピー済みの状態にします。MCCErrorEscapeのように、VBAで生成したコードテンプレートをすぐコードウィンドウへ貼り付けたい場合に使いやすい補助処理です。
使う場面
- VBAで生成したコード文字列を、そのままVBEへ貼り付けたい
- ログ、URL、メッセージ文などをユーザーがすぐ貼り付けられる状態にしたい
MCCErrorEscapeのようなコード生成補助プロシージャから、生成結果を受け渡したい- 改行を含む複数行テキストをまとめてコピーしたい
使用例
1行の文字列をコピーする場合は、次のように呼び出します。
コードを読み込み中...Sample_ClipTextを実行すると、次の文字列が貼り付け可能な状態になります。
この文字列をクリップボードにコピーします。
Sample_ClipText_MultiLineのように、vbCrLfでつないだ複数行の文字列もコピーできます。コード生成やメール本文の生成などでは、この複数行コピーが特に便利です。
MCCErrorEscapeとの関係
MCCErrorEscapeでは、エラー回避用テンプレートをStrへ組み立てたあと、最後にClipText(Str)を呼び出しています。
'クリップボード格納
Call ClipText(Str)
この1行があることで、生成したOn Error GoToテンプレートを手で選択してコピーする必要がなくなります。イミディエイトウィンドウからMCCErrorEscapeを実行したあと、コードウィンドウに戻って貼り付けるだけで次の作業へ進めます。
コピー可能な実装コード
コードを読み込み中...初心者向けコード解説
Public Sub ClipText(ByVal Text As String)は、コピーしたい文字列をTextとして受け取るSubプロシージャです。戻り値はなく、実行するとクリップボードの内容が書き換わります。
CreateObject("Forms.TextBox.1")では、MSFormsのテキストボックスを一時的に作っています。これはワークシート上に表示するための部品ではなく、文字列をコピーするための入れ物として使っています。
.MultiLine = Trueは、改行を含む文字列を扱えるようにする設定です。コード生成では複数行の文字列をコピーすることが多いため、この設定を入れておくと使い回しやすくなります。
.Text = Textで、引数として渡された文字列をテキストボックスへ入れます。その後、.SelStart = 0と.SelLength = .TextLengthで全文を選択し、最後に.Copyでクリップボードへコピーします。
注意点
- 実行すると、直前にユーザーがコピーしていたクリップボード内容は上書きされます。
Forms.TextBox.1を使うため、配布先環境でMSForms系の部品が利用できるか確認してください。通常のWindows版Excelでは使えるケースが多いですが、環境差はあります。- パスワード、APIキー、個人情報などの機密情報をコピーする用途では、誤貼り付けやログ残りに注意してください。
- コード生成補助として使う場合は、生成コードを貼り付けたあとに必ず目視確認してから実行します。
関連記事
- エラー回避コードのひな形を生成するMCCErrorEscape
- コードウィンドウへ戻すShowCodeWindowDelay
- イミディエイトウィンドウをCUIのように使ってプロシージャコードを半自動生成する
軽いまとめ
ClipTextは、VBAで作った文字列をユーザーがすぐ貼り付けられる状態にする小さな汎用部品です。
単体でも便利ですが、MCCErrorEscapeのようなコード生成補助プロシージャと組み合わせると、生成、コピー、貼り付けの流れをかなり短縮できます。
