###前提・実現したいこと
C#のプログラム(フォーム)から、起動中のExcelにDBより取得した値を転記する。
転記後もExcelは開いたままで、ユーザーのEXCEL操作で保存や終了をしたい。
###発生している問題・エラーメッセージ
転記処理自体は上手くいくのですが、転記後にエクセルを閉じる際に、
VBAプロジェクトパスワードを確認する画面が、5回表示されてしまいます。
このパスワード確認画面を表示しないようにしたいです。
パスワード未入力で5回Okを押すと、閉じることができます。
###該当のソースコード
private static bool CheckTransExportDebug( Excel.Application xlApp, Excel.Workbook xlBook, DataTable transData, ref bool warnFlg, ref List<string> warnList, ref int regCount ) { Excel.Worksheet xlSheet = null; Excel.Range targetCells = null; Excel.Range targetRange = null; try { // 作業シート読み込み xlSheet = (Excel.Worksheet)( xlBook.Sheets[SHEET_EXPORT] ); // セルへ書き込み targetCells = xlSheet.Cells; targetRange = (Excel.Range)targetCells[15, 12]; targetRange.Value2 = "10"; return true; } catch ( Exception ex ) { logger.Exception( ex ); return false; } finally { // Excelリソース解放 Marshal.ReleaseComObject( targetRange ); Marshal.ReleaseComObject( targetCells ); Marshal.ReleaseComObject( xlSheet ); Marshal.ReleaseComObject( xlBook ); Marshal.ReleaseComObject( xlApp ); } }
###試したこと
転記後、C#のアプリを先に閉じた場合、エクセルを閉じてもパスワード確認画面は出ませんでした。
EXCELリソース解放処理の前に、上記ではコメント中ですがEXCELを閉じる処理を入れてみたところパスワード確認画面は立ち上がりませんでした。
xlBook.Close();
xlApp.Quit();
このことから、C#でエクセルオブジェクトが解放されていないのが原因という可能性が高いと思っているのですが、そもそもエクセルを閉じずにオブジェクトを解放することはできるのでしょうか?
###補足情報(言語/FW/ツール等のバージョンなど)
(環境)
Windows7Professional
C# VisualStudio2012
.NetFramework4.0
Oracle 11g
Excel2010
Excelへのアクセスは、Interopを使用。
(Excelの制限)
Excelは他システムベンダーが開発したもので、シート保護されている。
許可された項目以外は入力できない。
もちろんVBAも修正できない。