- - PR -
VBScriptを使ってExcelを作成する時にCalculationプロパティを設定できません
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-08-31 10:10
バッチ処理にてVBScriptを使ってExcelを作成しています。
次第にそのExcelでのレポート対象のデータ件数が増え、当初1,2分で終わった処理が、現在50分以上かかるようになってしまいました。 そこで、処理時間の短縮を目指し調査したところ、Excel作成途中に自動再計算しないと早くなるとのアドバイスを受けました。 アドバイスに従い以下のようにApplication クラスの Calculation プロパティに値:xlCalculationManualをセットして処理をするように変更しました。 1 Set objExcel = CreateObject("Excel.Application") 2 Set objWorkbook = objExcel.Workbooks.Add() 3 4 Wscript.Echo "Calculation: " & objExcel.Calculation 5 Wscript.Echo "--------------------------------" 6 7 objExcel.Calculation = xlCalculationManual 8 Wscript.Echo "Calculation: " & objExcel.Calculation 9 10 Wscript.Echo "--------------------------------" 11 12 objExcel.Calculation = xlCalculationAutomatic 13 Wscript.Echo "Calculation: " & objExcel.Calculation 14 15 objExcel.Quit 例えば上記のVBScriptを実行すると7行目で、” Microsoft Office Excel: Application クラスの Calculation プロパティを設定できません。” というエラーになってしまいます。 同じと思われるApplication クラスのScreenUpdatingプロパティ等には値が設定出来るのに、なぜ、Calculationプロパティには設定出来ないのでしょうか? あるいは、上記コードに間違い、回避策等がありましたら教えて頂けないでしょうか? よろしくお願いします。 | ||||||||||||
|
投稿日時: 2006-08-31 10:40
試してませんが。
>xlCalculationManual VBScriptから、参照なしでこの定数は解決できるんでしょうか? | ||||||||||||
|
投稿日時: 2006-08-31 10:53
参照出来ませんでした。 WSHにしてタイプライブラリを参照したら上記は動作しました。 ありがとうございました | ||||||||||||
|
投稿日時: 2006-08-31 11:16
WSF ファイルにそんなメリットがあったとは。
勉強になりました。 .vbs ファイルを .wsf ファイルに移行して、
[参考] Hey, Scripting Guy!: スクリプトからタイプ ライブラリにアクセスする方法はありますか | ||||||||||||
|
投稿日時: 2006-08-31 12:28
はい、そうです。ただ、私はGUIDしか調べられなかったので
としました。 便乗質問ですいません。WSHにおいてExcelのタイプライブラリにはProgIDを何とすればよいかご存知でしたら教えてください。個人的にGUIDはやはり解りにくいので ■経過報告 実際のバッチ処理を、WSHにして参照設定して実行したところ、 ” Microsoft Office Excel: Application クラスの Calculation プロパティを設定できません。” となってしまいました。いま、落ち着いてもう一度チェックします。 | ||||||||||||
|
投稿日時: 2006-08-31 13:20
解決しました。
としていたのを
と変更したところエラーとならずに実行できました。WorkbookオブジェクトがないとCalculation プロパティは設定出来ないようです。ScreenUpdating プロパティは設定できました。両者を同じApplication クラスのプロパティと考えていたところに落とし穴がありました。 ありがとうございました。 | ||||||||||||
|
投稿日時: 2006-08-31 13:40
ちゃんと調べもせずにレスしてしまいました。申し訳ありません。
『80040068: この参照用のタイプ ライブラリが見つかりません。』 のエラーになりました。 私の方でも調べましたところ、k2a-go さんの仰るとおり GUID で指定するしかなさそうです。 http://www.roy.hi-ho.ne.jp/mutaguchi/bbs/list27.shtml ※【おじさま】さんの 2000/12/26/ 14:30:30 の投稿を参考にしました。 [ メッセージ編集済み 編集者: いげ太 編集日時 2006-08-31 13:45 ] | ||||||||||||
|
投稿日時: 2006-08-31 16:23
さらに調べてみたら Microsoft サポート技術情報(文書番号: 183771)に
行き当たりました。 [VB] ActiveX コンポーネントで作成されるレジストリ エントリ これに従い、Scripting.FileSystemObject のタイプライブラリを レジストリエディタ上から追跡すると、
対して、Excel.Application の場合、
上記の走査方法が、スクリプト実行時にも当てはまるならば、
がエラーになる理由になります。 真偽の程は分かりかねますが、ご参考まで。 [修正] HKEY_CLASSES_ROOT\CLSID\{0D43FE01-F093-11CF-8940-00A0C9054228} のサブキーに TypeLib がない。 ↓ HKEY_CLASSES_ROOT\CLSID\{00024500-0000-0000-C000-000000000046} のサブキーに TypeLib がない。 [/修正] [追記] 上記の推論、検証しました。 本題は解決済みのようですので、追記にてご報告します。 サブキーに TypeLib がないからダメかも、って推論。 ってことは、追加してスクリプトが動けばこの推論が正しいか分かる。
を追加したところ、下記の検証コードが動作しました。
よって、推論は正しいものと思われます。 [ メッセージ編集済み 編集者: いげ太 編集日時 2006-09-05 11:57 ] [ メッセージ編集済み 編集者: いげ太 編集日時 2006-09-05 14:15 ] |
1