Office関連

[VBA]DataObjectを使ったクリップボード操作が上手くいかない場合の対処法

VBAマクロからクリップボードを操作する場合、定番となっているのがDataObjectを使った方法です。

Public Sub Sample()
  With New DataObject
    .SetText "こんにちは、世界!"
    .PutInClipboard
  End With
End Sub

ところが、近年この方法だと上手くいかないという質問や投稿をよく見かけるようになりました。

対処法として有効とされているのがSetClipboardData等のクリップボード周りのAPI関数を使う方法ですが、個人的には、クリップボードに文字列を出し入れするためだけに、わざわざAPIを呼び出したくはありません。

そこで、もっと簡単な方法がないものかと思っていたのですが、先日ExcelQ&A掲示板を見たときに「これはイケそう!」というコードが載っているのを見つけました。

TextBoxを経由して文字列をコピーする方法です。
なるほど!API関数を呼ぶよりよっぽどシンプルなコードです。

ただ、上記質問のコードでは複数行の文字列に対応していなかったので、MultiLineプロパティを有効にしたコードを書いてみることにしました。

Option Explicit

Public Sub Sample()
  Dim s1 As String, s2 As String
  
  s1 = "中国語テスト:" & vbNewLine & _
       ChrW(&H94F6) & ChrW(&H884C) & ChrW(&H6682) & ChrW(&H505C) & _
       ChrW(&H65B0) & ChrW(&H589E) & ChrW(&H4F4F) & ChrW(&H623F) & _
       ChrW(&H8D37) & ChrW(&H6B3E)
  SetCB s1
  GetCB s2
  CreateObject("WScript.Shell").Popup s2
End Sub

Private Sub SetCB(ByVal str As String)
'クリップボードに文字列を格納
  With CreateObject("Forms.TextBox.1")
    .MultiLine = True
    .Text = str
    .SelStart = 0
    .SelLength = .TextLength
    .Copy
  End With
End Sub

Private Sub GetCB(ByRef str As String)
'クリップボードから文字列を取得
  With CreateObject("Forms.TextBox.1")
    .MultiLine = True
    If .CanPaste = True Then .Paste
    str = .Text
  End With
End Sub

Windows 10(64ビット版) + Office 2016(32ビット版)環境でテストしましたが、私が確認した限りでは意図した通り動いているようです。

クリップボード操作でお困りの方は是非一度お試しください。
(これでダメな場合は、やはり諦めてAPI呼び出しを・・・)

[リボン・カスタマイズ]dropDown要素の初期項目を指定する。前のページ

Microsoft アカウント + v2.0 エンドポイント + JavaScriptでMicrosoft Graphを呼び出す方法次のページ

関連記事

  1. Office関連

    スライドショーをループ再生設定するPowerPointマクロ

    PowerPointでスライドショーを作成するとき、投影した後流しっぱ…

  2. Office関連

    リボンのタブを選択するVBAマクロ

    マクロでリボンのタブを選択する方法として、ActivateTabやAc…

  3. Office関連

    Google翻訳の言語自動検出機能を追う

    「Google TTSで文字列を読み上げるマクロ」でGoogle翻訳の…

  4. Office関連

    セル内の改行をカウントするExcelマクロ

    「Excel セルの内容 改行を数える VBA」といったキーワード検索…

  5. Office関連

    関数一覧(Excel 2013)

    関数の挿入ダイアログから抽出したExcel 2013の関数情報を表にし…

  6. Office関連

    関数一覧(Excel 2010)

    関数の挿入ダイアログから抽出したExcel 2010の関数情報をリスト…

コメント

  • コメント (0)

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP