VBATips

クリップボードへのコピーが文字化けする対策【ExcelVBA】

以前まで下記記事のように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上でユーザーフォームを挿入すると自動的にこのライブラリが参照設定されます。

VBAコード上のメニューで以下処理を行い、ユーザーフォーム挿入します。

メニュー→[挿入(I)]→[ユーザーフォーム(U)]

ユーザーフォームが不要であれば、ユーザーフォームを削除してください。

どんな時に使える?

エクセルマクロ単体では変数で代用できるため、あまり使用するケースは少ないかもしれません。
以下のような外部ソフトと連動や、外部とのやり取りする場合に使います。

例)マクロ上で商品コードでの検索をして検索結果になかった場合
エラー原因をエクセル外(業務ソフト側)で調査する時に、該当の商品コードがコピーが出来ていれば作業効率があがります。
例)オークションサイトでの文面のやり取りに、定型文などの文面のコピーさせる。
マクロを実行後、都度やり取り必要な情報をコピペでやり取りする事で、人が作業する内容が減ります。
例)定形進捗報告メール、売上報告など、毎日必要な内容を提携でやり取りする。
メール報告やLINE報告が必要な場合があると思います。Windowsの機能を使用し、コピーする形なのでエクセルの枠を超えて使用可能です。

その他)クリップボードからデータを取得する方法

以下のコードのようにGetFromClipboardを使用してクリップボードからデータ取得も可能です。

    Dim ClipBoard As New DataObject
    
    With ClipBoard
        .GetFromClipboard
        MsgBox GetFromClipboard
    End With

 

 

コメント

  1. […] 詳細を知りたい方は、こちらの記事が詳しいので参照してみてください。https://vba-create.jp/vba-error-clipboard-copy/ […]

  2. こんにちは。

    .text = cpy_txt

    上記のコードは以下が正ではないでしょうか。
    .Text = temp

    • ご指摘ありがとうございます!修正いたしました。
      ブログ記事用に修正したものが正常に反映されていませんでした。

  3. とても助かります、利用させていただきました。
    どうもありがとうございました。

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