【VBA】クリップボードに全角文字列を設定/取得する

参照設定

  • Microsoft Forms 2.0 Object Library
  • 参照設定から「C:\Windows\SysWOW64\FM20.DLL」を選択すると上記参照が追加される。(デフォルトで選択肢に表示されない。)

クリップボードから文字列を取得

Public Sub SetClipboardData(t As String)
  Dim dObj As New DataObject
  Call dObj.GetFromClipboard
  GetClipboardData = dObj.GetText
  Set dObj = Nothing
End Sub

クリップボードへ文字列を設定 (半角のみ)

Public Sub SetClipboardData(t As String)
  Dim dObj As New DataObject
  dObj.SetText (t)
  Call dObj.PutInClipboard
  Set dObj = Nothing
End Sub
  • 全角を設定した場合クリップボードにうまく設定されない。全角を設定したい場合は以下を用いる。

クリップボードへ文字列を設定 (全角対応)

Public Sub SetClipboardViaTextbox(t As String)
  'クリップボードに文字列を格納
  With CreateObject("Forms.TextBox.1")  
    .MultiLine = True         ' 改行が入らない場合は設定不要(デフォルトでfalse)
    .text = t
    .SelStart = 0        ' コピー開始文字位置
    .SelLength = .TextLength  ' コピー対象文字長
    .Copy
  End With
End Sub
  • やっていること(テキストボックスを作成)とやりたいこと(クリップボードに文字列を設定)が異なるのはあまり良くないですが、他のサイト様ではWin32APIをゴリゴリに呼び出していて少し複雑そうなので…
  • なにより職場でネットサーフィン禁止なのでこのくらいシンプルでないと覚えられない…

参考文献

EXCEL VBAのクリップボード 文字化け問題とプリンタ名が頻繁に変わる問題を解決

【ExcelVBA入門】クリップボードを使ったデータの設定・取得方法とは

コメントを残す