- - PR -
Excel2000でRTD関数のようなことできますか?
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-07-13 14:19
件名の件で悩んでます。
現在求められていることは
という非常に厳しいものです。 とりあえず以下のような仕組みでやろうと考えています。
Excelのセルに反映させる方法はいくつかあるかと思いますが、そもそも「Excel自身のスレッドとは別のスレッドからExcelに対して値を更新する」というのが安全かどうかが非常に疑問なのです。 どなたかこの辺のことに対して白黒ハッキリできるような資料をご存じないでしょうか? どれもこれもExcel2002から導入されたRTD関数の使用を認めてもらえれば一発で解決できるのですが・・・ (この場合RTDサーバを作成する必要がありますが、この辺の資料はたくさん見つけることができました。) | ||||||||
|
投稿日時: 2008-07-13 15:54
私は VB(6以下) で ActiveX Control を作って、それを Excel のワークシートに貼り付けています。ActiveX Control がその中で (VB の) RaiseEvent によりイベントを起こしたら、Excel の VBA で書かれたイベントハンドラーで処理して、セルを更新したりしています。 私はスレッドなどは良く知らないため、ActiveX Control の中で RaiseEvent する際は、念のため Timer コントロールを使い、Interval = 1 に設定して1ミリ秒後に発火するようにして、タイマーイベント(Timer イベントハンドラー)の中で RaiseEvent するようにしています。 この方法が安全か?と問われても自信はありませんが、一応なんとなく動いています。趣味のプログラムなのであまり検証はしていません。 [ メッセージ編集済み 編集者: unibon 編集日時 2008-07-13 15:55 ] | ||||||||
|
投稿日時: 2008-07-14 00:02
unibonさん、早速のご返答ありがとうございます。
ここなんですよね、最大の問題は。 私もなんとなく動く方法はいくつか試してそれなりにうまくいっている「ように見える」のですが、マルチスレッド環境でExcelのセルに書き込む、またはセルに書かれている関数を再計算するのが安全かどうかがどうしてもわからないのです。 Excel 2003以降であれば「OfficeのスレッドモデルはSTA」という記述がいくつか見つかるので自作するスレッドもSTAなら問題はなさそうなのですが、Excel 2000となると極端に資料が少なくてモヤモヤしています。 # Excel 2002以降であればRTDが使えるのでそもそもこんなこと気にする必要がないですが・・・ Excel 2000はSTAなのでしょうか? Excel 2000でマルチスレッドによるセルの更新は安全なのでしょうか? 「そんなの保障されていない!」ということが分かる公式ドキュメントがあればかえって楽になれるのですが | ||||||||
|
投稿日時: 2008-07-14 01:31
無関係てことはありませんが、最も重要なのは、ワーカースレッドから Excel にアクセスする際にはマーシャリングが必要であるという点です。 | ||||||||
|
投稿日時: 2008-07-14 17:46
渋木宏明(ひどり)さん、追加情報をありがとうございます。
http://msdn.microsoft.com/ja-jp/library/8sesy69e(VS.80).aspx を見たところ、マーシャリングは自動的に行なわれそうですね。 しかし、この情報は一番最初に「このトピックでは、Microsoft Office 2003 オブジェクト モデルでスレッドをサポートする方法について説明します。」と書かれているため、相変わらずExcel 2000でも使えるかどうか不明です。 トホホ
| ||||||||
|
投稿日時: 2008-07-15 01:12
おお、これは知りませんでした。 頑張ってますね>Office
ですね。 たぶん、COM AddIn をサポートしているバージョンになら当てはまるような気がしますし、それより前のバージョンでも対応している可能性はあります。 これに関しては、実地で Excel 2000 の TLB を調べて IMessageFilter が実装されているかどうか確認してみる、てのでもいいんじゃないでしょうか。 |
1