- PR -

シートコピー時のイベント発生

1
投稿者投稿内容
よっこらしょ
常連さん
会議室デビュー日: 2006/11/18
投稿数: 24
投稿日時: 2008-05-17 23:45
お世話になります。
環境は EXCEL2000 WinXPSP2です。
(あまり環境とは関係無いかもしれませんが念の為)

VBAでシート(又は選択部分)をコピーした際に検知したいのです。
要するにクリップボードのバッファが変わった時にイベントを起こして処理したい。
(もちろんEXCELがアクティブな時のみ)

そのような機能ってVBAにあるでしょうか?
よろしくお願いします。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2008-05-18 13:43
引用:

よっこらしょさんの書き込み (2008-05-17 23:45) より:
VBAでシート(又は選択部分)をコピーした際に検知したいのです。
要するにクリップボードのバッファが変わった時にイベントを起こして処理したい。
(もちろんEXCELがアクティブな時のみ)

そのような機能ってVBAにあるでしょうか?


私が知る限りはないんじゃないでしょうか。ちなみに、機能の存在の有無を精度良く調べられたいのでしたら、Excel 関連の掲示板のほうが効率が良いかもしれません。(使っている人が多いからヒットしやすいのでは、という意味です。ここ(@IT 会議室)がダメと言っているわけではありません。念のため。)

件名は「シート」のコピーということですが、Excel の下にあるシートのタブ(Sheet1, Sheet2, Sheet3 など)のコピーではおそらくないのですよね?シート全体を選択した Range のコピーですよね?(違うかな?)

プログラムでゴリゴリやるとしたら、クリップボードの変化を検出する Windows API はあるので、それを使ってコピーされたタイミングを捕まえることはできそうに思います。ただ、クリップボードの中身が Excel の Range なのかの判定などはもう1段階難しいかもしれませんが、原理的にはできるはずです。簡易的には CSV の文字列としてもおそらくクリップボードにコピーされていると思いますので、CSV の文字列処理でやる手もあるかもしれません。
ただ、面倒くさいですね。着手される前に、Excel にそのようなイベントや機能が本当にないかを確認されたほうが良いかもしれませんね。

#以下、追記。

Range の選択ならば Worksheet_SelectionChange というイベントがありますが、選択ではなくコピーを捕まえられたいのですよね。

[ メッセージ編集済み 編集者: unibon 編集日時 2008-05-18 13:48 ]
よっこらしょ
常連さん
会議室デビュー日: 2006/11/18
投稿数: 24
投稿日時: 2008-05-19 18:43
引用:

unibonさんの書き込み (2008-05-18 13:43) より:
私が知る限りはないんじゃないでしょうか。ちなみに、機能の存在の有無を精度良く調べられたいのでしたら、Excel 関連の掲示板のほうが効率が良いかもしれません。(使っている人が多いからヒットしやすいのでは、という意味です。ここ(@IT 会議室)がダメと言っているわけではありません。念のため。)

件名は「シート」のコピーということですが、Excel の下にあるシートのタブ(Sheet1, Sheet2, Sheet3 など)のコピーではおそらくないのですよね?シート全体を選択した Range のコピーですよね?(違うかな?)

プログラムでゴリゴリやるとしたら、クリップボードの変化を検出する Windows API はあるので、それを使ってコピーされたタイミングを捕まえることはできそうに思います。ただ、クリップボードの中身が Excel の Range なのかの判定などはもう1段階難しいかもしれませんが、原理的にはできるはずです。簡易的には CSV の文字列としてもおそらくクリップボードにコピーされていると思いますので、CSV の文字列処理でやる手もあるかもしれません。
ただ、面倒くさいですね。着手される前に、Excel にそのようなイベントや機能が本当にないかを確認されたほうが良いかもしれませんね。

#以下、追記。

Range の選択ならば Worksheet_SelectionChange というイベントがありますが、選択ではなくコピーを捕まえられたいのですよね。

[ メッセージ編集済み 編集者: unibon 編集日時 2008-05-18 13:48 ]



そうです、シート単位ではなくRange単位のコピーです。
無いとは思っているのですが、ほんとに無いのか?と思い質問した次第です。
実現させようと思ったら結構労力が要りそうですね。
サブクラス化ってのをすれば出来るのかな?
ちょっと調べてみます、ありがとうございます。
1

スキルアップ/キャリアアップ(JOB@IT)