[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/02/21(Mon) 23:57
投稿者名:maw
Eメール:mawmawxx@hotmail.com
URL :
タイトル:
DAOを使うとExcelのプロセスが残ってしまう
初めて投稿します。よろしくおねがいします。
私は現在、VBからExcel上にWebクエリを展開し、
その内容を取得するという処理を何回か繰り返す処理を考えています。

当初は、
1.Excel開く

2.Webクエリ展開

3.Excel保存後閉じる

4.データ取得(DAO)
以上の1〜4を1サイクルとして繰り返し処理を行っていました。
この時点では問題はありませんでした。
ここからさらに、毎回Excelを開きなおしていると無駄な時間がかかると思い、
処理時間の短縮のために
1.Excel開く

2.Webクエリ展開

3.Excel保存

4.データ取得(DAO)

5.Excel閉じる
の2〜4を1サイクルとして繰り返し処理を行うようにアルゴリズムを
変更しました。
以上のように変更すると、処理終了後にExcelのプロセスが残ってしまうように
なったのですが、その原因が自分では解明できませんでした。
このサイトの「Excel のタスクを正常に終了できない現象」にあった内容も全て
確認したのですが、今回のケースは該当しないようです・・。
ちなみに、DAOを使わずにFor文などの繰り返しを使ってデータを取得すると、
プロセスが残る問題は発生しません。
しかし、DAOを使わないと処理にかかる時間が跳ね上がってしまうので
これは避けたいのです。
なぜExcelのプロセスは残ってしまうのでしょうか?
アドバイス等いただけますと幸いです。宜しくお願い致します。

実際のコード(変更後)は以下のようになっております。
hhttp://homepage1.nifty.com/awas/test.txt
(長くなってしまったので外部リンクにしました。)
※環境は、Windows2000でVB6.0、Excel2000です。

投稿時間:2005/02/22(Tue) 09:09
投稿者名:LESIA
Eメール:
URL :
タイトル:
Re: DAOを使うとExcelのプロセスが残ってしまう
DBがExcelをつかんでいるのでは?
DBを先に閉じてみてはどうでしょう。

'DBも閉じる
DB.Close
Set DB = Nothing

'Excelを閉じる
xlApp.Quit
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing

投稿時間:2005/02/22(Tue) 09:15
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: DAOを使うとExcelのプロセスが残ってしまう
1.Excel開く

2.Webクエリ展開

3.Excel保存

5.Excel閉じる

4.データ取得(DAO)
でやればいいのでは。

投稿時間:2005/02/22(Tue) 13:01
投稿者名:maw
Eメール:
URL :
タイトル:
Re^2: DAOを使うとExcelのプロセスが残ってしまう
LESIA様、花ちゃん様、返信ありがとうございます。
>LESIA様
頂いたアドバイスのとおり、閉じる順序を入れ替えてみましたが、
やはりプロセスが残ってしまいました・・。

>花ちゃん様
Excelを開くのと閉じるのは、最初と最後の1回だけにしたいのです。
閉じてからデータ取得すると、次のWebクエリ展開の前に
もう一度Excelを開きなおさなければなりません。
Excelをいちいち開きなおすのにかかる時間を省くために、
変更後の処理順、つまり
Excel開く→(Webクエリ展開→DAOによるデータ取得)の繰り返し→Excel閉じる
を考えた次第です。

引き続き自分でも調査していきたいと思います(今のところ進展無し)。
ありがとうございました!

あ、アドバイスも引き続き募集中ですので宜しくお願い致します。

投稿時間:2005/02/22(Tue) 13:20
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: DAOを使うとExcelのプロセスが・・・
> 閉じてからデータ取得すると、次のWebクエリ展開の前に
> もう一度Excelを開きなおさなければなりません。
どうせ、Excel ファイルを保存してからDAOで読み込んでいるなら
必要な分だけ保存処理をしてExcelを閉じ、その後そのファイルを
DAOだけを使って読み込めばいいのでは。

同じファイルに対して、ExcelとDAOで同時にアクセスしている為に
内部的になんらかのトラブルが発生しているものと思うのですが、
保存した時にファイル名を変更して保存してそのファイル名をDAOで
読み込んだ場合はどうなりますか?

投稿時間:2005/02/22(Tue) 17:57
投稿者名:maw
Eメール:
URL :
タイトル:
【解決】DAOを使うとExcelのプロセスが・・・
細やかなレスポンス、ありがとうございます。

> 必要な分だけ保存処理をしてExcelを閉じ、その後そのファイルを
> DAOだけを使って読み込めばいいのでは。

1回の処理で、必要なデータ量が1ケースあたりシート10枚前後で、
だいたい100ケース(最大で500程)の読込みを行うため、
保存するExcelファイルは合計1000シートもくっついたものになってしまいます。
シート数の上限はメモリ依存とのことで自分の環境での上限数は未確認ですが、
必要なデータを全て取得後に保存してDAOでアクセス、という方法は
シート数の上限という点から、なるべくなら避けたいと考えています。

> 同じファイルに対して、ExcelとDAOで同時にアクセスしている為に
> 内部的になんらかのトラブルが発生しているものと思うのですが、
> 保存した時にファイル名を変更して保存してそのファイル名をDAOで
> 読み込んだ場合はどうなりますか?

SaveAsで別名保存(Excel形式)し、そのファイルをDAOで読み込んでみましたが、
処理終了後プロセスは残っていました。
そこで、Excel形式ではなく、以下のように各シートをCSV形式で別名保存し、読み込んでみました。

:
xlSheet.SaveAs App.Path & "\test" & k & ".csv", xlCSV
:
Set DB = OpenDatabase(App.Path, False, False, "Text;DATABASE=" & App.Path &
"\;HDR=NO")
:
strSQL = "Select * from [test" & k & "#csv] "
Set RS = DB.OpenRecordset(strSQL, dbOpenDynaset)
:

以上のように変更したところ、Excelのプロセスはきちんと消えました!!
この方法であれば、ローカルに一時的に保存されるCSVファイルも最大で10程度で、
特に問題は無さそうです。

花ちゃん様、LESIA様、アドバイスありがとうございました!
おかげさまで読込み処理の所要時間を大幅に短縮できました。

原因としては、花ちゃん様のコメントにもあるように、
同時アクセスが原因となって内部で何らかのトラブルが発生していたのでしょうか・・?