プログラムからExcel操作中にExcelファイルを開くには?


ジンタ  2005-02-17 01:31:51  No: 88450

はじめまして

VBのプログラムからExcelファイルを操作する処理を作成しています。
この処理には1時間〜2時間掛かるのですが、その間Excelファイルを開くと、開いたファイルに対してプログラムが操作を行ってしまいます。

通常プログラム実行中はExcelファイルを開かない運用を行ってもらっているので問題ないのですが、開発中のテスト段階でも上記運用で作業しています。
別にテスト用のPCがあればいいのですが、開発用に自分のPCを使わされている状態でPCをもう1台用意するのはかなり厳しい状態で。。。

なにか良い方法がありましたら教えていただけないでしょうか?


いな  2005-02-17 03:16:42  No: 88451

おそらく、ブック名やシート名に
Active〜等を指定しているからではないでしょうか?
明記すれば防げると思われます。


ジンタ  2005-02-17 03:50:57  No: 88452

説明不足だったのですが、私のプログラムでは、ブック名、シート名を明示的に指定せず、添え字で行っています。

Workbooks(1).Sheets(1)

なので、逆にブック名やシート名を一意になるような名称にして明示的に指定すればいいということですかね?


INA  2005-02-17 20:29:36  No: 88453

そう思います。

プログラムをどのように書かれているのでしょうか?

ブックを開いた時点でオブジェクト変数に入れて処理すれば、
大丈夫だと思いますが・・・。


Dental  2005-02-18 03:18:14  No: 88454

> この処理には1時間〜2時間掛かるのですが、
計算処理とかが入るのなら仕方がないとは思うけれど、単にデータを
Excelに渡すだけだとしたら、ちょっと時間がかかりすぎな気がします。

たとえば、
   oSheet1.Range("A1:G20").Value = 2次元配列
の1行ですむ所と、
   oSheet1.Cells(1, 1).Value = "A"
   oSheet1.Cells(2, 1).Value = "B"
   oSheet1.Cells(3, 1).Value = "C"
みたいに、セル一つ一つに対して操作してたりしませんか?

> その間Excelファイルを開くと、開いたファイルに対してプログラムが操作を行ってしまいます。
それは多分、コーディング側に問題があります。

たとえば、
  oApp.Workbooks(1).Worksheets(1).Range("A1").Value = 1234
などのように、常に添え字を使ってアクセスしていたり、あるいは、
Active系/Selection系のプロパティ経由で操作したりしていませんか?

たとえば、添え字を使った書き方にしていると、別のブックを開くことで、
添え字の番号がずれたりする可能性があるので危険です。
この場合はたとえば、
  Set oBook1 = oApp.Workbooks.Open(〜)
  Set oSheet1 = oBook.Worksheets(1)
  oSheet1.Range("A1").Value = 1234
のように、開いた直後に、そのオブジェクトへの参照を変数に保持しておき、
以後はこの oBook1, oSheet1 などの変数経由で操作すれば、別のブックが
開かれたりしても、常に同じオブジェクトを操作できます。

> 通常プログラム実行中はExcelファイルを開かない運用を行って
Interactive プロパティを指定しておけば、ユーザー操作を禁止できます。

あるいはExcelを使うにしても、操作中のExcel上でワークブックを開かせるのではなく、
Excelをもうひとつ起動して、そちら側で操作してもらう運用ならば、問題ないのでは。


ジンタ  2005-02-18 18:49:53  No: 88455

ずばり、Active系/Selection系のプロパティ経由で操作してます。
オブジェクト変数を使えば確かに問題なさそうですね。

>ちょっと時間がかかりすぎな気がします。
データを渡すだけでなく1000〜2000ぐらいグラフを作成したりしています。
(昔は1グラフ作るのに3分掛かってました!)

運用ではDentalさんの言うようにどうしてもExcelを使う場合は、別のExcelを起動してもらい、ファイルを開くで開いてもらうようにしてもらっています。
ただ、僕がそれを忘れてしまい、プログラムのテスト中にメールが来てメールに添付されているExcelファイルをついクリックしてしまい、「あーーー!」と言って泣きながらタバコに火を付けることが何度かありまして。。。

でも何とかできそうですね。
INAさん、Dentalさん、ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加