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関連

    VBAでインターネット上のファイルをダウンロードする方法をまとめてみました。

    「VBA ファイル ダウンロード」といったキーワード検索でのアクセスが…

  2. Office関連

    「IEを自在に操る Excel VBAプログラミング入門」レビュー

    ※ 下記レビューはあくまでも個人的な感想です。2013年9月2…

  3. Office関連

    Unicodeブロックを元に指定した文字が平仮名なのかカタカナなのか漢字なのかを判別するVBAマクロ…

    以前書いた「ルビ(ふりがな)を一括設定するWordマクロ」記事で使った…

  4. Office アドイン

    [Office用アプリ]Seller Dashboardの不満点

    当ブログでも散々取り上げていますが、ストア登録の申請含めて、Offic…

  5. Office関連

    【2018年9月版】Microsoft Office関連の公式リンクまとめ

    Ignite 2018やOffice 2019のリリースがあり、Off…

  6. Office アドイン

    JavaScriptで作成した作業ウィンドウアプリを検証してみる。

    ※ この情報はOffice 2013 カスタマー プレビュー版を元にし…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

PAGE TOP