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






トップページへ

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

 

目的

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

 

既知の問題点

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

 

その場合は、

コピーVBAを「数回」実行する

それでもダメ

他のアプリ(Edge, Chromeなどブラウザやエクスプローラー)が起動していたら終了し、コピーVBAを実行(空きメモリを増やす)

それでもダメ

Excelを再起動して、コピーVBAを実行

それでもダメ

パソコンの再起動

の順で対処しています。

 

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

 

 

処理の流れ

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

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

クリップボードからテキストデータをワーク領域(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

 

エクセルのメニューに戻る






関連記事
[Excel][VBA] バッチ処理風

ExcelのVBAでエラーになった事例集

Excel 非表示モジュール内でコンパイル エラーが発生しました

Excelメニュー

[Excel][操作]一気に先頭行、先頭列に戻る