« 『Firefox』が『ファイルが壊れているため動画を再生できません。』とおっしゃる!? | トップページ | 『フィリッピン』に行ってみた♪(お土産編…) »

2013年12月 6日 (金)

『Excel』からクリップボード経由でテキストを他のアプリケーションにペーストしたい!

エクセルからクリップボードを操作する方法は、
かなり特殊で制限があり、エクセルを終了した後、
クリップボードにコピーしたテキストを
他のアプリケーションで使用が出来ない…。(T_T)

まあ、レアケースなんですが…。

他のPCでも使用する事が前提なので、
特殊なアプリを作って対応は、前提としてNG…。

…でも、駄目ならそれもありかも…。

と結構ブルー。

そこで、見つけたのがこれ
VBAでメモ帳にコピペをしたいのですが…

で色々調べた結果、こうなった。

Sub TestCopyText()
    ActiveSheet.Range("A1:A1").Value = "test text"
    ActiveSheet.Range("A1:A1").Copy
    ClipBoardCopy
    MsgBox "send text ok?"
End Sub
Function ClipBoardCopy()
    ' メモ帳を最小かつフォーカス有りで起動。
    Shell "notepad.exe", vbMinimizedFocus
    ' テキストを貼り付け
    CreateObject("Wscript.Shell").SendKeys "^v"
    ' テキストを全て選択
    CreateObject("Wscript.Shell").SendKeys "^a"
    ' クリップボードにコピー
    CreateObject("Wscript.Shell").SendKeys "^c"
    ' 入力があった状態で終了すると、セーブするか聞いてくる。
    ' 「Ctrl+Z」で未入力状態に戻す。
    ' これで、問い合わせを無くす。
    CreateObject("Wscript.Shell").SendKeys "^z"
    ' メモ帳を「Alt+F4」で終了させる
    CreateObject("Wscript.Shell").SendKeys "%{F4}"
End Function

原理は、エクセルのクリップボードへのコピーは、制限があるが、
その制限内でメモ帳にコピーを行い
改めてメモ帳でクリップボードにコピーを行う。

メモ帳のクリップボード・コピーは、
メモ帳が終了しても生きている。

正し、これでも上手く行かない場合は、
『Shell "notepad.exe", vbMinimizedFocus』を
『Shell "notepad.exe", vbNormalFocus』にする事で
上手く行った。

これの、弱点は、「ClipBoardCopy」内の処理中に
フォーカスが移動する事。
最も、一瞬なので大丈夫だと思うのだが…。

その辺は、『MsgBox』でのアナウンスの直後に
処理をするなど、工夫が必要かもしれない。

素直にコピーアンドペーストさせてくれれば、
こんな手間は無いんだけどね…。

でも、セルは、計算式など複雑で奇々怪々な情報の塊なので
実際にクリップボードにコピーされるのは、参照先なのだろう。
ならば、参照先が消滅したら、内容も無くなる理屈かと思う。

実際、セル内のテキストを直接入力状態にして、
クリップボードにコピーを行うと、エクセルを終了してもコピーは生き残る。

一元的に管理するために必ずセルを介して操作しろと言う事なのだろう。

思想として正しと思うのだが…

なので、外部で別にクリップボードにコピーをさせる形で
外部で使用できる形にするって、やっぱ手間…。

でも、出来たので良しとしよう…。(^^;)

|

« 『Firefox』が『ファイルが壊れているため動画を再生できません。』とおっしゃる!? | トップページ | 『フィリッピン』に行ってみた♪(お土産編…) »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: 『Excel』からクリップボード経由でテキストを他のアプリケーションにペーストしたい!:

« 『Firefox』が『ファイルが壊れているため動画を再生できません。』とおっしゃる!? | トップページ | 『フィリッピン』に行ってみた♪(お土産編…) »