忍者ブログ
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

エクセルを立ち上げる際にはWorkbooks.Open(pass) 
エクセルにアクセスするためにはGetObject(pass) この2つを使い分けなければなりません。
 
GetObjectは開いているファイルにアクセスするのものなので、ファイルが開いてない場合には意図したとおりに動いてくれません。
 
今回の主題でもある、多重制御の必要性については結構ややこしい話があります。
ので、考え方を今回で、ソースについては次回に回します。
 
まずは、jscriptでは現在開いている窓のファイル名の取得(Mutex等)ができないということを念頭において以下を見て下さい。
 
エクセルを操作する処理を行う場合に、
「処理先のエクセルが本当に今開いているの?」
というのを確認しないといけません。
 
Workbooks.Openは2回目以降は「読み取り専用」としてエクセルが開きます。
処理のたびに開いていては窓が増えるだけなのです。
なので、あくまでも
Workbooks.Open→GetObjectという手順を守らなければなりません。
 
開いてなければWorkbooks.Openを使って、
開いてればGetObjectを使いたいので、この切り分けを判断させる必要があります。
 
あるいは運用で幾らかは回避できます。
・開いてあることを前提とする

こうすればよいのですが、キーワード反応で処理を行う場合、この縛りは結構なウェイトがあります。ので、やっぱり多重制御をしようという話になります。

ならば、開いてなかったら処理をスキップさせるということも考えられますが、

開いているかいないかを判断させる方法がわからない。

という現実があります。というのも冒頭の通り、ファイル名を取得する方法がないからです。

幸い?にもプロセスを参照する方法がjscriptにはあります。なので、プロセスを参照して、「EXCEL.EXE」が存在しているかしてないかを見分けるということはできます。

しかしこの場合、ターゲットのエクセルが開いているかどうかはわかりません。
もしかしたら別のエクセルが開いている可能性もあります。

たしかに、ターゲットが開いているぞ。というのを確認するために、ファイル名以外でなにかないかと考えた所、

「プロセスID」というのがあります。

じゃぁターゲットのプロセスIDを取得するためにどうしたらいいか。

基本固定値じゃありません。開くたびに変動します。

なのでプロセスを取得するためにはファイルを開く時しかありません。

しかもEXCEL.EXEしか分別できないので、ターゲットを開くときに他のエクセルが開いていたら正しく取得できないかもしれません。

ややこしいのでまとめると

①ターゲットのエクセルが開いているのかを知りたい
②ファイル名参照がjscriptではできない。
③プロセス(EXCEL.EXE)は知ることができる
④他のエクセルが開いていたら勘違いしちゃうかも
⑤じゃぁプロセスID(PID)で判断しよう
⑥どうやって取得するの?
⑦jscript上で立ち上げさせて、その時にPIDを保持しとこうか
⑧EXCEL.EXEまでしかわからないから、他のエクセルと勘違いしたりしない?
⑨立ち上げの時だけは他のエクセルが開いていない状態。という制限を設ければ必ずターゲットのエクセルのPIDが取得できるだろう。

という話の流れができます。

というわけでプログラム的な制御は以下のようなものになります。

◆エクセル立ち上げ部分
エクセルをプログラムから立ち上げさせて、PIDを取得する。
その際、他のエクセルが立ち上がっていたら警告する。

よって

STEP1:ターゲットのファイルがまず存在しているかを確認
STEP2:他のエクセルが立ち上がっていないかを確認
STEP3:上記2点がtrueならばターゲットを立ち上げて良いよ(PID取得)

以降は他のエクセルが立ち上がっても影響はなし。


◆エクセルへのアクセス
プロセスを参照して、格納したPIDと合致すれば「ターゲットが開いている」と判断できるのでアクセスを許可する

STEP1:PIDが格納されているかを確認。そして読み込み
STEP2:ターゲットのファイルが存在しているかを確認
STEP3:プロセスにEXCEL.EXEって今存在しているかを確認
STEP4:すべてtrueなら、「それの」PIDを読み込んだPIDとマッチングさせる
STEP5:合致すればアクセスOK

いきなりプロセス上のPIDを全参照して、合致するかを見てもいいのですが、
本当は開いていないときに、
ランダム?で配布されるPIDが万が一、違うアプリで同じになるということもありえないわけではないと思うので。
まずはEXCEL.EXEをさがして、そのPIDを参照するという形にします。

Mutex使えればこんなことしなくて済むんですけどね・・・

という結構めんどくさいお話でした。

ソースは次回へ
PR
COMMENT
name
title
text
color   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
mail
URL
pass
secret
PREV ←  HOME  → NEXT
プロフィール
HN:
komyu/シュクレール/修造
性別:
非公開
自己紹介:
こうぶつはけものみみとのーびす(♀)とエリーン
主にROとTERAとラノベと雑多なkomyuの日記帳です。
新生FF14
TERA紋章しみゅ
ROサポートツール
タイムライン
RSSボットが記事更新をつぶやくのがほとんどっス…
ROキャラクター紹介


TERAキャラ紹介

シュクレール(バサ)



syuzo(エレ)



サケマス(アチャ)


その他サブ

ウリエルキゥィス(スレLv54)

Vermillion(サラLv56)

パズドラ

157,318,362
フレンド募集中
枠なきゃ増やす
最終プレイ3日以上になったら消す
カレンダー
03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
ツリーカテゴリ
ブログ内検索
最新コメント
[04/30 のな]
[03/22 NEIN]
[03/22 NEIN]
[10/31 イロイ]
[05/02 NONAME]
Copyright (C) 2024 のーびす監察日記 All Rights Reserved.
Photo by 戦場に猫 Template Design by kaie
忍者ブログ [PR]