Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
VBAで System.Windows.Clipboardを使いたい
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30358#CommentId83382
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
魔界の仮面弁士
 (社会人)
投稿日時
2018/9/6 18:32:17
そういうバージョン情報は、最初に書いておいていただけると助かります。
> クリップボードに代入しているのはVB2005でMy.Computer.Clipboard.SetText() を使用しています。
それは System.Windows.Clipboard クラスではなく
System.Windows.Forms.Clipboard クラスです。紛らわしいですよね…。
(といっても、両者に機能的な差異は無いのですが)
System.Windows.Clipboard という名のクラスも存在しているのですが、
それは、.NET Framework 3.0 以降で利用可能な
WPF (Windows Presentation Foundation) 用のクラスなのです。
VB2005 が対応しているのは .NET Framework 2.0 ですので、
そもそも WPF アプリケーションを作成できません。
また My.Computer の Clipboard プロパティが返すオブジェクトは、
Microsoft.VisualBasic.MyServices 名前空間の ClipboardProxy クラスです。
これの SetText メソッドでは、内部的に、
System.Windows.Forms.Clipboard クラスを呼び出しています。
System.Windows.Clipboard クラスでありません。
> クリップボードの仕組みは良く理解しておりません。
まずは前提知識の確認。
下記の 3 点についてはご存知でしょうか?
(1)クリップボードは、アプリケーションごとに所有されているものではなく、OS 全体で単一のリソースです。
(2)一回のコピー操作では、一つのデータを表すために、同時に複数の形式のデータが書き込まれます。
これについては、Excel シート上で右クリックしたときに「形式を選択して貼り付け」という選択肢を選んでみると分かりやすいでしょう。
(Excel で対応していない形式は表示されないですけど)
(3)貼り付け操作時には、そのアプリが対応している形式が記録されているかどうかを調べ、それを貼り付けます。
対応形式が複数あった場合、どの形式で貼り付けられるのかは、貼り付け先アプリケーションの実装次第です。
たとえば、クリップボード上に画像をコピーしておいても、
それをメモ帳に貼ることができないことはご存知ですよね。
その理由が上記 (3) というわけです。
メモ帳は画像形式は扱えないので、貼り付け操作が行われません。
ただし画像形式と同時に、テキストや Unicode テキスト形式が
保持されている場合は、そのテキストが貼られることになります。