![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
naritanです。
マクロでシート上のデータを編集して帳票を出力しているExcelがあります。
そのExcelに対して、DBから取得したデータをシートに挿入して、ASPから
帳票出力マクロを実行させたいと思っています。
しかし、ExcelブックにDBから取得したデータを挿入すると、
スクリプトがタイムアウトになってしまいます。
DBから取得した1カラムだけ挿入すると上手くできるのですが、
27カラム(1レコード)を挿入するとスクリプトタイムアウトになってしまいます。になってしまうのでしょうか?
環境は、WinNtWS4.0 + Access2000 + PWS + Excel2000です。
以下に、その部分のソースを載せます。
----------------------------------------------------------------------Set Exl = Server.CreateObject("Excel.Application")
Set ExlBook = Exl.Workbooks.Open ("g:\hw_manage\Pc\5.xls")
Set ExlSheet = ExlBook.Sheets("一覧")
ExlSheet.Activate
with ExlSheet
i = 4
'//DB取得値(RsPrint)がEOFになるまでExcelにデータ挿入
Do until RsPrint.EOF
.Range("A" & i).value = RsPrint("STAT_FG")
.Range("B" & i).value = RsPrint("MAKER_NM")
.Range("C" & i).value = RsPrint("MODEL_NM")
.Range("D" & i).value = RsPrint("CPU")
~省略~
i = i + 1
Loop
end with
----------------------------------------------------------------------
No.3ベストアンサー
- 回答日時:
タイムアウトということから考えると、スクリプトの実行時間が長すぎるということですよね。
ということは、スクリプトの実行時間を減らすことを考える必要があります。
ソースの中で、Server.CreateObject、Workbooks.Openがありますが、このあたりは、非常に時間のかかるコマンドだと思います。
実際このあたりでタイムアウトしてそうだということですので、このあたりを直す必要があります。(ソースがコピー&ペーストかどうかはわかりませんが、5.xlsのファイルもネットワーク上にありそうですね。それだと余計に時間がかかりますね)
せめて、Excelの起動を、セッション開始時かアプリケーションの開始時にすることはできませんか?それでも、Do・・・Loopでタイムアウトしそうですが・・・(Excelのオブジェクト操作は、割と重いように私は感じています。)
あとは、タイムアウトの時間を延ばすことですが、レスポンスが悪いままなので、操作ユーザーは、トラブルなのかと心配になり、困ることになりそうですが、大丈夫でしょうか?
もうひとつ思いつきました。
少し難しいですが、Excelにデータを挿入する機能を持った、非同期処理のできるActiveXコンポーネントを作成し、それをASPから呼ぶというのはどうですか?それなら、操作ユーザーも待ちませんし、ASPタイムアウトもなし。ただし、操作終了と、Excelでの処理は非同期ですので、すぐにそのファイルを開いても、操作は終了していませんが・・・
目的がわからないで、なんともいえませんが、どうしてもExcelのファイルでなければならない理由がなければ、CSVファイルに出して、Excelに読ませるようにするほうが、よいような気がします。
丁寧なご回答、ありがとうございます。
実は、つい先程、解決致しました。
原因は、Excelブックにあったみたいです。
試しに、モジュールを新規Excelにエクスポートして実行してみたところ、
サクサクッと処理が終了しました。もちろん、ExcelのVBAも正常に動作しています。
いろいろとお手数をお掛けしました。
ありがとうございました。
No.2
- 回答日時:
補足から...
多分Excelのオブジェクトの解放関連に問題がある様に思えます。
作成したオブジェクトはしっかり解放していますか?
それを先に確認して見て下さい。
マニュアル等では、自動的に解放と読める部分もありますが、タイミングによっては、解放を行ってくれないので、プログラムでしっかり解放してあげましょう。
それをやってから...。
Excelファイルの解放後に、少々時間を置くようにして見て下さい。直に取得すると、エラーになりやすいので......ね。
この回答への補足
ご回答ありがとうございます。
オブジェクトの解放はちゃんと行っているのですが、
VBみたいに、エラー時にON ERROR GOTOで解放処理に飛ばす事ってできるのですか?
リファレンスを見たところ、VBSにはON ERROR RESUMU NEXTしかなかったものですから・・・
No.1
- 回答日時:
どのタイミングでタイムアウトになるのですか?
挿入した時? 挿入の結果待ち? 次の挿入を行う時? 2カラムではうまくいくの?(どこからエラーになるの?)
そもそも、Excelを使用している意味がわかりません。ASPで運用してるのですよね??
だったら、全部ASP上で行えばいいのでは?
今一度、Excelを使用する意味を考えてみて下さい。
私なら、データ加工までは全部Access2000+ASPだけで構築して、Excelは使用しない様にします。理由は、連携等は問題発生時にエラーの特定が難しいので...ね。
また、グラフの作成の必要があれば、グラフのコントロールをASPから使用すればいいのですし...。
どうしても、Excelを使用しなければならないのなら、別にISAPI等のアプリケーションを作成してしまって、安全に動作させる事を考えます。ね。
この回答への補足
ご回答ありがとうございます。
タイムアウトになるのは、EXCEL.EXEのプロセスが残っていることから、
EXCEL起動後の何処かだと思います。
処理の流れとしては、
画面でデータ抽出条件を指定して、印刷ボタンをクリックして、ONCLICKメソッドでJAVASCRIPTに処理を移し、FORMをSUBMITして同画面を再読込し、EXCEL起動ロジックが実行される。
というものなのですが、印刷ボタンをクリックしても、接続している状態のままが面は変わらず、そのままタイムアウトしてしまっています。
画面が変わらないにも関わらず、EXCELが起動しているらしく、
プロセスに残ってしまっています。
EXCELを使用している意味は、既存EXCELのマクロが複雑に作られており、
1からACCESS等でリメイクするのも時間がかかると思ったからです。
試しに、既存EXCELのVBAをASPにINCLUDEして実行してみたのですが、
やはり、VBSではサポートされていないメソッドが多々あるらしく、
その部分を補正していくのも時間がかかると思い、諦めました。
naritanです。
補足に補足致します。
再度、各行にresponse.writeを書き、
タイムアウトのタイミングを調べてみた結果、
Set ExlBook = Exl.Workbooks.Open ("g:\hw_manage\Pc\5.xls")
の直前に書いたresponse.writeまで表示されましたので、
上記の行でタイムアウトしているみたいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/03/28 14:52
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) エクセルVBA 3 2022/06/23 20:00
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイルやフォルダの有無、他...
-
Access2003で「オブジェクト'○○...
-
サーバー上のファイルアクセス...
-
バッチによるショートカットの...
-
複数のテキストファイルをexcel...
-
Microsoft Access エラー 3051
-
Excelでdatファイルを作成??
-
batファイル処理でのテキストフ...
-
テキストファイルの文字色に色...
-
CSVファイルの出力に関して
-
レーザープリンターのA4・5...
-
ファイル指定を、ハードコード...
-
HDDのクローン作成時の素朴な疑...
-
バッチファイルが作成できない
-
複数のファイルを同時検索し、...
-
テキストファイルを、ファイル...
-
フォルダ作成用バッチファイル...
-
VBAで、テキストファイルの削除...
-
Refreshで落ちる
-
subversionからファイル取得時...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access2003で「オブジェクト'○○...
-
ファイルやフォルダの有無、他...
-
FileExitsについて
-
BASP21を使わないファイルアッ...
-
サーバー上のファイルアクセス...
-
ASPが動かない
-
ASPでファイルアクセス失敗
-
何百台の社内端末移設をしてお...
-
Excelでのデータ挿入が上手くで...
-
delphiネットワークドライブフ...
-
VBScriptでファイルアップロー...
-
LAN上のMDBをIIS(ASP)から開く
-
Accessでパソコンの情報を得るには
-
ASPとは
-
拡張子.vbsのファイルの外部フ...
-
Excelでdatファイルを作成??
-
バッチによるショートカットの...
-
VBAでファイルパスが長すぎてコ...
-
複数のテキストファイルをexcel...
-
フォルダ作成用バッチファイル...
おすすめ情報