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

タイトル エクセルの解放について
投稿日: 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

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

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