HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
0725
Darumaエクセルのプレビュー画面で"Close"かけるとエラー8解決


Daruma

リンク

2011/7/25(Mon) 07:06:10|NO.40175

エクセルにデータ入力し印刷するのを作っていますが、プレビュー画面にしたまま
"Close"コマンドかけると「#error30 ... 無効な名前がパラメータに指定されている」
、となります。エクセルとの連動についてほとんど無知なのでどなたか教えてください。
以下はサンプルです。

xlsname = "book1.xls" xlsfname = dir_cur +"\\"+ xlsname newcom xlApp, "Excel.Application" xlApp("Visible") = 1 ; Excelウィンドウ表示 xlApp("DisplayAlerts") = 0 ; 警告メッセージを表示させない xlBooks = xlApp("Workbooks") ; Workbooks コレクション取得 xlBooks->"Open" xlsfname ; 指定ファイルを開く xlBook = xlBooks("Add") ; book取得 xlSheet = xlBook("Worksheets","sheet1") ; Sheet取得 xlRange = xlSheet("Range","B3") : xlRange("Value") = "Sample data1" xlRange = xlSheet("Range","B4") : xlRange("Value") = "Sample data2" ;以下、セルへデータ入力続く dialog "エクセル印刷操作終了待ち",0 xlBooks->"Close";プレビュー画面にしたまま"Close"かけるとここで#error30 xlApp->"Quit" delcom xlApp delcom xlRange delcom xlSheet delcom xlBook delcom xlBooks stop
プレビュー画面自体を終了させる方法があるのだと思いますが探しきれませんでした。
よろしくお願いします。



この記事に返信する


backdrop

リンク

2011/7/25(Mon) 17:08:10|NO.40186

エラーの原因は印刷プレビュー画面中はCOM連動可能な機能から外れているので、
その状態でCOM操作を行うことによってエラーが出るのだと思います。

この場合、ExcelのCOM復帰はHSPではできないので、onerrorの割り込みでやり直す的なものを使うしかないと思います。



Daruma

リンク

2011/7/26(Tue) 10:02:32|NO.40210

backdropさん アドバイスありがとうございました。
早速onerrorでサブルーティン処理し、あわよくば処理復帰させようとしましたが
どうも結局、強制終了しか手がないようです。(ユーザーには申し訳ないのですが...)
しかも"end"で終了時に下記のRuntime errが出てしまいます。
---------------------------
Microsoft Visual C++ Runtime Library
---------------------------
Runtime Error!

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
最後がこの表示ではかっこうが悪いので、なんとか出さずに
終了させられる方法を探ってみます。
もし何か方法をご存知でしたお教え願います。
ありがとうございました。
(未練がましく、まだ未解決のフラッグにしておきます)



backdrop

リンク

2011/7/26(Tue) 12:30:52|NO.40211

ちなみにRuntime Error!というのは見ての通りVC++ランタイムが返すエラー。
つまり、VC++プログラムに対して不正なコマンドを送信した時に帰ってきたと思われます。

強制終了がかっこ悪いなら、残念ながらこの問題は避けられないでしょう。



wass

リンク

2011/7/26(Tue) 16:50:07|NO.40216

Exselでのそういう技術はVBAの方がはかどると思うんだけどな
余裕があるならこっちも勉強するのが吉



backdrop

リンク

2011/7/26(Tue) 17:00:57|NO.40217

>Exselでのそういう技術はVBAの方がはかどると思うんだけどな
「Excel」です。念のため言っておきますがHSPでやりたいから質問してるんだと思います。
そもそもVBAはマクロなので遠隔操作ではありません。



さくら

リンク

2011/7/28(Thu) 21:45:21|NO.40275

Excel2007でテストして見ました。
下記のようにプレビュー画面をマクロで表示させてみましたが
印刷プレビュー画面はモーダルとなっているので、手動で閉じるかSendKey命令等
でキーを送って閉じない限り、xlBooks->"Close"は実行されないと思うのですが・・・
手動で閉じてもエラーなく正常に終了しました。


xlSheet->"PrintPreview" ;提示されている上記Scriptに追加 dialog "エクセル印刷操作終了待ち",0 xlBooks->"Close";プレビュー画面にしたまま"Close"かけるとここで#error30



Cookies

リンク

2011/7/28(Thu) 22:44:35|NO.40276

>>Exselでのそういう技術はVBAの方がはかどると思うんだけどな
>「Excel」です。念のため言っておきますがHSPでやりたいから質問してるんだと思います。
>そもそもVBAはマクロなので遠隔操作ではありません。
HSPでやりたいのはそうですが、COM操作したいときはVBAが結構役立ちます。
勉強するのはいいと思いますよ。
ExcelCOMの情報収集なんてVBAで調べるのが一番良いし。



Daruma

リンク

2011/7/30(Sat) 21:48:40|NO.40307

皆様、いろいろアドバイスやご意見ありがとうございます。
私の方もまだこれといった解決策は見出せておりません。

私が最初に問題点を明確にしておらず皆様の観点がぼやけて
しまったようであればお詫びします。
問題点は以下となります。

ソフトを使われるユーザーの操作例:
1.ソフトを操作してデータを作成・集計・収集する。
2.ソフトはそのデータをExcelに出力する。
3.ユーザーはそのExcel表を印刷してから戻る。
  この戻るきっかけとなるDialogで直後にxlBooks->"Close"をかけている。
4.ユーザーは引き続きデータ処理を続けるか処理を終える。
この一連の中でユーザーが、Excelのプレビュー画面を閉じ忘れて
Dialogで印刷終了と応答するとError 30となりソフト自体が内部エラーで終了してしまいます。

現時点ではExcelを開くときに”プレビュー画面を出したなら必ず閉じて下さい”という
コメントをDialogに出すようにする予定です。
それでも閉じ忘れたならthe endとなります。
データは必ずFile保存してからExcel openするフローにして消失を防ぎます。
とりあえずはこんな処理でしのごうと考えています。
皆様、いろいろご協力ありがとうございました。
悩みを出して大勢の方々にご意見をいただける場があるのはとても頼もしいと思っています。
これで一旦解決とさせていただきます。
今後ともよろしくお願いいたします。



ONION software Copyright 1997-2023(c) All rights reserved.