tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルエクセル起動終了について
記事No7318
投稿日: 2008/04/11(Fri) 18:07
投稿者take
お世話になります。
VB2008ですがよろしいでしょうか?

フォームに1つのボタンを配置し、クリックによりエクセルを起動します。
いずれエクセルの色々なイベントを取得したいため、Applicationオブジェクトだけは保持させています。(Button1_Clickのところで解放すれば問題なく起動、終了できるのですが・・・。)
エクセルを起動し、終了すると”呼び出しのターゲットが例外をスローしました。 Nothing”のエラーが出ます。メッセージボックスを閉じるとエクセルのプロセスは消えます。(xlappにNothingは設定されていませんが。)
次に再度エクセルを起動すると”呼び出しのターゲットが例外をスローしました。  Button1”のエラーが出てエクセルが起動できません。
”xlapp = Nothing”の箇所をコメントアウトすると、一度目のエラーは出ずにエクセルのプロセスは消えるのですが、やはり二度目の起動ができません。xlappを見ると解放されていません。xlappにNothingが設定できれば再起動できると思うのですが。

下記がコードです。よろしくお願いします。


Public Class Form1

  Private WithEvents xlapp As Excel.Application

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Try
      xlapp = CreateObject("Excel.Application")
      Dim xlBooks As Excel.Workbooks = xlapp.Workbooks
      xlBooks.Add()

      xlapp.Visible = True

      System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBooks)
      xlBooks = Nothing

    Catch ex As Exception
      MsgBox(ex.Message & " Button1")
    End Try

  End Sub

  Private Sub xlapp_WorkbookBeforeClose(ByVal Wb As Excel.Workbook, ByRef Cancel As Boolean) Handles xlapp.WorkbookBeforeClose
    Try
      System.Runtime.InteropServices.Marshal.ReleaseComObject(xlapp)
    Catch ex As Exception
      MsgBox(ex.Message & " Release")
    End Try
    Try
      xlapp = Nothing
    Catch ex As Exception
      MsgBox(ex.Message & " Nothing")
    End Try
  End Sub

End Class

[ツリー表示へ]