質問です。よろしくお願いします。
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)
> xlSheets = xlBook.Worksheets
> xlSheet = xlSheets.Item("Sheet1")
このあたりでは、Sheetsクラスのインスタンスも管理しているのに、
> objOleObj = xlSheet.OLEObjects.Add(ClassType:="BARCODE.BarCodeCtrl.1")
この時点では、OLEObjectsクラスのインスタンスを放置していますよね。
これが、プロセスが残ってしまう原因かと。
> > objOleObj = xlSheet.OLEObjects.Add(ClassType:="BARCODE.BarCodeCtrl.1")
> この時点では、OLEObjectsクラスのインスタンスを放置していますよね。
> これが、プロセスが残ってしまう原因かと。
おかげで解決しました。
やはり、OLEObjectsクラスのインスタンスを放置が原因でした。
ありがとうございました。
ツイート | ![]() |