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

わんくま同盟

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

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


(過去ログ 86 を表示中)
■50766 / )  Re[4]: Excel(SaveAs)がフ゜ロセスに残る
□投稿者/ VBねっと (3回)-(2010/06/17(Thu) 15:41:00)
No50727 (魔界の仮面弁士 さん) に返信
 アドバイス頂いた内容を確認しましたが、どうもExcel2003 SP3側に原因がありそうです。
 VB.netでの回避手段も模索しています。

>> 参照設定を外し、すべてレイトバインドで利用してみた場合はどうでしょうか?

 →チェック用に別プロジェクトを作成し、下記のコードで確認しましたがだめでした。
 
   Private Sub Button1_Click
        Dim oExcel As Object
        Dim oBooks As Object
        Dim oBook As Object
        Dim oSheet As Object
        Dim oRange As Object
        Try
            'Excel起動
            oExcel = CreateObject("Excel.Application")
            oBooks = oExcel.Workbooks
            oBook = oBooks.Add

            '仮データ入力
            oSheet = oBook.Worksheets(1)
            oRange = oSheet.Range("A1")
            oRange.Value = "hoge"

            'Excel保存し終了
            System.Runtime.InteropServices.Marshal.ReleaseComObject(oRange)
            System.Runtime.InteropServices.Marshal.ReleaseComObject(oSheet)

            oBook.SaveAs("c:\Book1.xls")
            oBook.close()
            System.Runtime.InteropServices.Marshal.ReleaseComObject(oBook)
            System.Runtime.InteropServices.Marshal.ReleaseComObject(oBooks)
            oExcel.Quit()
            System.Runtime.InteropServices.Marshal.ReleaseComObject(oExcel)
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

    End Sub


>> .NET ではなく、Word VBA や VBScript などから呼び出した場合も、残ってしまいますか?
→下記コードで2回目以降に残ります。(上書きになるため?)
 但し、oExcel.DisplayAlertsをTrueにしても、2回目以降にあわられる「上書きしますか?」
 で「はい」を選んでも残ります。
 直接、手動でExcelを開き、プログラムと同じ処理をしてみましたが、当然のことながら、
 問題は起きませんでした。 Excelのみを使用する場合は起きません。 Excelを外部プログ
 ラムで操作すると起きるようです。

Option Explicit

Dim oExcel
Dim oBooks
Dim oBook
Dim oSheet
Dim oRange

'@エクセルオブジェクトを作成します
Set oExcel = CreateObject("Excel.Application")
Set oBooks = oExcel.Workbooks
Set oBook = oBooks.Add
Set oSheet = oBook.Worksheets(1)
Set oRange = oSheet.Range("A1")

oRange.Value = "hoge"

'Aエクセルを終了します
oExcel.DisplayAlerts = false
oBook.SaveAs("c:\Book1.xls")
oBook.close()
oExcel.Quit

'オブジェクトの破棄
Set oExcel = Nothing
Set oBooks = Nothing
Set oBook = Nothing
Set oSheet = Nothing
Set oRange = Nothing

>>ネットに「SaveAsの後にApplication.DoEvents()を入れてみてください。」というのがありましたが、
> 具体的な URL を教えていただけないでしょうか。http://ap.atmarkit.co.jp/bbs/core/fdotnet/10767?page=2 にありました


> どうしても解決できないようであれば、CreateDomain したアプリケーションドメインに
> Excel.Application を CreateInstanceFromAndUnwrap しておき、xls 保存処理完了後に、
> 最後にそのアプリケーションドメインを Unload してみるというのは如何でしょう。
→う〜ん 非力な私には時間がかかりそうです。
 もう少し勉強します。
 (初心者に近い私にとって、ネットで検索しても実装するために必要な知識を習得できそうな記事が
 見当たりません。ヒントになるようなサイトがあれば紹介お願いします。)


返信 編集キー/


管理者用

- Child Tree -