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

わんくま同盟

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

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


(過去ログ 86 を表示中)
■50806 / )  Re[6]: Excel(SaveAs)がフ゜ロセスに残る
□投稿者/ VBねっと (4回)-(2010/06/18(Fri) 13:30:46)
No50796 (Azulean さん) に返信
> なぜ、そのように判断したのでしょうか。
> 根拠をお聞かせください。

  @VBSでもレイトバインドでも解決されない->プログラムの問題ではないのでは?
 AExcel2002(別のPC)では問題ない。
 と思ったからです。

 ※但し、検証用に新規作成したVBS・VB.net(レイトバインド)には下記不具合があ
 りましたので、修正して確認しました。 しかし、今度は、1回目から残りました。

  PCの環境かもしれませんので、Office2003とVB2008Expressを再インストするなど
 やってみます。


>>            oSheet = oBook.Worksheets(1)
> 
> Worksheets を一度変数で受けて、これも Release しないとだめですよね。
> ("Worksheets(1)" と直接やるとリークして(漏れて)いる)

 下記のようにVBSのコードを修正しましたが、今度は、1回目からExcelがプロセスに
 残りました。

------------------- VBS(修正版) -----------------------
Option Explicit

Dim oExcel
Dim oBooks
Dim oBook
Dim oSheets
Dim oSheet
Dim oRange

'@エクセルオブジェクトを作成します
Set oExcel = CreateObject("Excel.Application")
Set oBooks = oExcel.Workbooks
Set oBook = oBooks.Add
Set oSheets= oBook.Sheets
Set oSheet = oSheets.item(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 oSheets = Nothing
Set oSheet = Nothing
Set oRange = Nothing

--------------------- VB.net(修正版) --------------------
    Private Sub Button1_Click
        Dim oExcel As Object
        Dim oBooks As Object
        Dim oBook As Object
        Dim oSheet As Object
        Dim oSheets As Object
        Dim oRange As Object
        Try
            'Excel起動
            oExcel = CreateObject("Excel.Application")
            oBooks = oExcel.Workbooks
            oBook = oBooks.Add

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

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

            oExcel.DisplayAlerts = False
            oBook.SaveAs("c:\Book1.xls")
            oBook.close()

            System.Runtime.InteropServices.Marshal.ReleaseComObject(oBook)
            System.Runtime.InteropServices.Marshal.ReleaseComObject(oBooks)

            oExcel.Quit()
            System.Threading.Thread.Sleep(5000)
            System.Runtime.InteropServices.Marshal.ReleaseComObject(oExcel)
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

    End Sub

返信 編集キー/


管理者用

- Child Tree -