以前まで下記記事のようにClipBoardのDataObjectを使用してコピーしていましたが、
環境によってはコピーして文字化けするようです。(Windows10/64bit/Excel2016で発生)
ExcelVBAマクロ「指定したキーワードをクリップボードへコピーする」をパーツ化する
上記記事のPutInClipboardが文字化けを起こす原因のようです。
文字化けする環境でも、コピーする方法はあります。
以下のコードを参考にしてください。
文字化けする端末でもクリップボードへコピーする方法
'■指定したキーワードをクリップボードへコピーする(文字化け対策済み) Public Function call_ClipBoardSave(temp As String) With CreateObject("Forms.TextBox.1") .MultiLine = True .text = temp .SelStart = 0 .SelLength = .TextLength .Copy End With End Function
使い方
上記をコピペでお好きなモジュール内に記載してください。
Dim temp As String temp = "この文章をクリップボードへコピーします" call_ClipBoardSave (temp)
結果イメージ
クリップボードに「この文章をクリップボードへコピーします」がコピーされます。
Ctrl+Cで該当の文章をコピーした状態ですので、
Ctrl+Vでそのまま貼り付けすることができます。(もちろんエクセル以外にも貼り付けする事が可能です)
注意点
- 上記コードを使用するには「Microsoft Forms 2.0 Object Library」を参照設定する必要があります。
VBA上でユーザーフォームを挿入すると自動的にこのライブラリが参照設定されます。
どんな時に使える?
エクセルマクロ単体では変数で代用できるため、あまり使用するケースは少ないかもしれません。
以下のような外部ソフトと連動や、外部とのやり取りする場合に使います。
例)マクロ上で商品コードでの検索をして検索結果になかった場合
エラー原因をエクセル外(業務ソフト側)で調査する時に、該当の商品コードがコピーが出来ていれば作業効率があがります。
エラー原因をエクセル外(業務ソフト側)で調査する時に、該当の商品コードがコピーが出来ていれば作業効率があがります。
例)オークションサイトでの文面のやり取りに、定型文などの文面のコピーさせる。
マクロを実行後、都度やり取り必要な情報をコピペでやり取りする事で、人が作業する内容が減ります。
マクロを実行後、都度やり取り必要な情報をコピペでやり取りする事で、人が作業する内容が減ります。
例)定形進捗報告メール、売上報告など、毎日必要な内容を提携でやり取りする。
メール報告やLINE報告が必要な場合があると思います。Windowsの機能を使用し、コピーする形なのでエクセルの枠を超えて使用可能です。
メール報告やLINE報告が必要な場合があると思います。Windowsの機能を使用し、コピーする形なのでエクセルの枠を超えて使用可能です。
その他)クリップボードからデータを取得する方法
以下のコードのようにGetFromClipboardを使用してクリップボードからデータ取得も可能です。
Dim ClipBoard As New DataObject With ClipBoard .GetFromClipboard MsgBox GetFromClipboard End With
コメント
[…] 詳細を知りたい方は、こちらの記事が詳しいので参照してみてください。https://vba-create.jp/vba-error-clipboard-copy/ […]
こんにちは。
.text = cpy_txt
上記のコードは以下が正ではないでしょうか。
.Text = temp
ご指摘ありがとうございます!修正いたしました。
ブログ記事用に修正したものが正常に反映されていませんでした。
とても助かります、利用させていただきました。
どうもありがとうございました。