タイトル | : エクセルの解放について |
記事No | : 11674 |
投稿日 | : 2016/05/23(Mon) 22:46 |
投稿者 | : もとき |
いつもお世話になっております。 申し訳ございませんが、教えて頂けないでしょうか? VB2005 エクセル2013を使用しています。
エクセルのテキストボックス名を取得したいと思います。 取得自体は出来たのですが、エクセルが解放されません。 「プロセスが正常に終了しない理由」等参考に させて頂きましたが、知識不足のため、解放できません。
申し訳ございませんが、 よろしくお願いいたします。
'●エクセルからテキストボックス名を取得 Public Function fncExcelTextBoxNameSyutoku(ByVal PathName As String) As List(Of String) Dim lstOutPut As New List(Of String) Dim xlApp As New Excel.Application Dim xlBooks As Excel.Workbooks Dim xlBook As Excel.Workbook Dim xlSheets As Excel.Sheets Dim xlSheet As Excel.Worksheet Dim xlShapes As Excel.Shapes Dim xlShape As Excel.Shape
xlBooks = xlApp.Workbooks xlBook = xlBooks.Open(PathName) xlSheets = xlBook.Worksheets xlSheet = DirectCast(xlSheets.Item("Sheet1", Excel.Worksheet) xlShapes = xlSheet.Shapes
For Each xlShape In xlSheet.Shapes lstOutPut.Add(xlShape.Name) MRComObject(xlShape) Next
'Excelの警告メッセージを表示しない xlApp.DisplayAlerts = False
'▼終了処理 MRComObject(xlShapes) MRComObject(xlSheet) MRComObject(xlSheets) 'xlSheets の解放 xlBook.Close(False) 'xlBook を閉じる MRComObject(xlBook) 'xlBook の解放 MRComObject(xlBooks) 'xlBooks の解放 xlApp.Quit() 'Excelを閉じる MRComObject(xlApp) 'xlApp を解放
fncExcelTextBoxNameSyutoku = lstOutPut End Function
'●エクセルの開放 Public Shared Sub MRComObject(Of T As Class)(ByRef objCom As T, Optional ByVal force As Boolean = False) If objCom Is Nothing Then Return End If Try If System.Runtime.InteropServices.Marshal.IsComObject(objCom) Then If force Then System.Runtime.InteropServices.Marshal.FinalReleaseComObject(objCom) Else Dim count As Integer = System.Runtime.InteropServices.Marshal.ReleaseComObject(objCom) End If End If Finally objCom = Nothing End Try End Sub
|