tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re: エクセルを2度目に起動するとエラーになってしまいます。
投稿日: 2007/04/24(Tue) 18:50
投稿者魔界の仮面弁士
> この時にエクセルの”WorkbookDeactivate”イベントを取り、オブジェクトの解放を
> 行おうとしています。
そのタイミングで解放するという事自体が不味いのでは。
未確認ですが、デリゲートが参照している分など、
逆に残しておいた方が良い参照も含まれているかも知れません。

> エクセルの終了はユーザーがエクセルの終了ボタンをクリックすることにより行っています。
終了処理をユーザ操作に任せるのであれば、イベントをとらえて処理するのではなく、
単に起動だけ行い、Excel への参照のみを解放するだけで良いのでは。

Module Sample
  Sub Main
    Dim O As Object = CreateObject("Excel.Application")
    O.Visible = True
    Dim S As Object = O.Workbooks
    Dim B As Object = S.Add()

    System.Runtime.InteropServices.Marshal.ReleaseComObject(B)
    System.Runtime.InteropServices.Marshal.ReleaseComObject(S)
    System.Runtime.InteropServices.Marshal.ReleaseComObject(O)

    MsgBox("終了")
  End Sub
End Module

>         Do
>           I = System.Runtime.InteropServices.Marshal.ReleaseComObject(objCom)
>         Loop Until I <= 0
どうしても RelaseComObject を複数回呼ばなければならない場面というのもありますが、
かといって、常にそのような方法で解放するのは、避けた方が良いかと。
使用中の参照をうっかり解放してしまうと、逆に問題があるでしょうし。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。