C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 144 を表示中)
■84603 / )  Re[4]: Excelのsaveasメソッドでフリーズしてしまいます
□投稿者/ 魔界の仮面弁士 (1351回)-(2017/07/20(Thu) 14:40:34)
No84600 (makoto さん) に返信
>> 開発言語は、.NET 版の Visual Basic のようですが、Excel 操作時においては、
>> 面倒でも「Option Strict On」付きでコンパイルされることをお奨めします。
> ご指摘ありがとうございます。Option Strict On」は宣言はしています。

Option Explicit On と混同していた…という可能性は無いでしょうか?

手元に同一環境が無いので未確認ですが、実際に Option Strict On が指定されているならば、
>> gvObjSheet = gvObjBook.Worksheets(該当シート)
のコードで、コンパイルエラー BC30512 あたりが報告されていそうな気がするのですが。

例:『Option Strict On で 'Object' から 'Microsoft.Office.Interop.Excel.Worksheet' への暗黙的な変換はできません。』


それと、今回はテンプレートによる別名保存が主目的なので、Workbooks に対しては
Open メソッドではなく、Add メソッドを用いた方が、コードの意図を示せると思います。
(テンプレートとなる元ファイルも、*.xlsx/*.xls ではなく *.xltx/*.xlt で)


> を追加して▼ExcelファイルClose処理のnothingの前にCOMオブジェクトの参照カウントのデクリメント
> を行ってみたのですが、Excelが終了しませんでした。

コードの一部をコメントアウトしてみて、どの箇所を通過したときに
終了しなくなるのかを探っていってみてください。


(1) New しただけで、Open(Add) せずにそのまま Quit した場合は、正常に閉じられるのか?

(2) Open(Add) した後、gvObjSheet に該当シートを取得することなく、
 gvObjBook.Close(False) と gvObjExcel.Quit() を呼び出した場合は?

(3) 該当シート にアクセスしただけで、セルにはアクセスしなかった場合は?


それと、Excel のオブジェクトに対して
For Each を呼び出していないかも確認しておきましょう。
http://bbs.wankuma.com/index.cgi?mode=red&namber=54149&KLOG=91
返信 編集キー/


管理者用

- Child Tree -