VB.NETからEXCELを操作した際(バーコードの貼り付け)プロセスが残る

解決


hase  2005-08-18 02:58:32  No: 91523

質問です。よろしくお願いします。
VB.netでExcelを操作した場合(バーコードの貼り付けを行ったEXCELのみ)に、「EXCEL.EXE」プロセスが残ったままになります。
しかも、バーコードの貼り付けを行わないEXCELの場合はプロセスは正常に終了します。ちなみに「xlapp.Visible = False」も「xlapp.ScreenUpdating = False」もきいていない様子です。(EXCEL画面が立ち上がります)

WinXP SP2
Excel2000 SP3

ご教授の程、よろしくお願い致します。

以下ソースです。

    Dim xlApp As Excel.Application
    Dim xlBooks As Excel.Workbooks
    Dim xlBook As Excel.Workbook
    Dim xlSheets As Excel.Sheets
    Dim xlSheet As Excel.Worksheet
    Dim objOleObj As Excel.OLEObject
    Dim objBarCtl As BARCODELib.BarCodeCtrl

        xlApp = New Excel.Application
        xlBooks = xlApp.Workbooks
        xlBook = xlBooks.Open("c:\TEST.xls")
        xlSheets = xlBook.Worksheets
        xlSheet = xlSheets.Item("Sheet1")
        xlApp.Visible = False               'Excelを表示しない
        xlApp.ScreenUpdating = False        'Excelを表示しない

                        objOleObj = xlSheet.OLEObjects.Add(ClassType:="BARCODE.BarCodeCtrl.1")
                        objOleObj.Locked = False
 

                        objBarCtl = objOleObj.Object
                        objBarCtl.Value = "012345"
                        objBarCtl.Refresh()

xlBook.SaveAs("c:\TEST.xls")  ''保存
            If Not objOleObj Is Nothing Then
                objOleObj.Delete()
                objOleObj = Nothing
            End If
            If Not objBarCtl Is Nothing Then
                objBarCtl = Nothing
            End If
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet)
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheets)
xlBook.Close
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook)
xlApp.Quit
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp)


魔界の仮面弁士  2005-08-18 04:02:45  No: 91524

> xlSheets = xlBook.Worksheets
> xlSheet = xlSheets.Item("Sheet1")
このあたりでは、Sheetsクラスのインスタンスも管理しているのに、

> objOleObj = xlSheet.OLEObjects.Add(ClassType:="BARCODE.BarCodeCtrl.1")
この時点では、OLEObjectsクラスのインスタンスを放置していますよね。
これが、プロセスが残ってしまう原因かと。


hase  2005-08-18 18:35:14  No: 91525

> > objOleObj = xlSheet.OLEObjects.Add(ClassType:="BARCODE.BarCodeCtrl.1")
> この時点では、OLEObjectsクラスのインスタンスを放置していますよね。
> これが、プロセスが残ってしまう原因かと。

おかげで解決しました。
やはり、OLEObjectsクラスのインスタンスを放置が原因でした。
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加