[Excel][VBA] クリップボードからテキストを取得

※全てのExcelで動作する保証はありません。また、内容に関し管理人は全ての責任を負いかねます

 

目的

クリップボード内のテキストデータが欲しい。画像データなどテキスト以外は処理をしない。

 

既知の問題点

原因は不明ですが、下のコードを実行してもクリップボードからコピーできない場合があります。他サイト様のコードを実行してもです。

 

その場合は、数回実行する→Excelを再起動する→他のソフトでコピペしてExcelに戻る→パソコンの再起動の順で対処しています。

 

おそらく、OSとExcelとのメモリ関係の処理の互換性の問題、あるいはメモリの排他制御(他アプリが使用権を握ったままになっている等)が要因ではないかと推定していますが根拠はありません。ともかく、「PCを再起動」をしメモリに関する命令をクリアする方法が確実と考えています。(2022年6月時点)

 

 

処理の流れ

クリップボードの中身をチェックし、テキスト形式のデータがあるのかチェック。

無ければ、メッセージを出して処理を抜ける。テキストデータがあるのなら続行。

クリップボードからテキストデータをワーク領域(w_str)へ転送。

(記載していませんが、この後はワーク領域の文字列に対する処理です)

 

サンプルコード

    Dim aFmts As Variant
    Dim fmt As Variant
    Dim sw_on As Boolean
    Dim w_str As String
    
'チェック処理
    aFmts = Application.ClipboardFormats
    sw_on = False

    For Each fmt In aFmts
        If fmt = xlClipboardFormatText Then
            sw_on = True
            Exit For
        End If
    Next

    If sw_on = False Then
        'クリップボードが空の時も
        MsgBox "クリップボードにテキストはありません", vbExclamation
        Exit Sub
    End If
'チェック処理
    
'メイン処理
    With New MSForms.DataObject
        .GetFromClipboard
    
        w_str = .GetText
    End With
'メイン処理

 

※MSForms.DataObjectでエラーになる場合は一番下のリンク先サイト様をご覧下さい。

 

この記事は下記のサイトを参考にさせて頂きました。謝辞

・チェック処理

Application.ClipboardFormats プロパティ (Excel) | Microsoft Docs

XlClipboardFormat 列挙 (Excel) | Microsoft Docs

・メイン処理、MSForms.DataObjectについて

クリップボードとデータのやりとりをする:Excel VBA|即効テクニック|Excel VBAを学ぶならmoug

この記事のQRコード
[ エクセル 関係の記事 ]へもどる


9679
amazonでエクセルと検索した結果
*該当しない場合があります