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

タイトル Re: エクセルの解放について(解決)
投稿日: 2016/05/23(Mon) 23:04
投稿者もとき
申し訳ございませんでした。


>         For Each xlShape In xlSheet.Shapes
>             lstOutPut.Add(xlShape.Name)
>             MRComObject(xlShape)
>         Next

でなく、

For Each xlShape In xlShapes
        lstOutPut.Add(xlShape.Name)
        MRComObject(xlShape)
Next

でした。
本当にすみませんでした。
これからは、
もっと注意して投稿いたします。



> いつもお世話になっております。
> 申し訳ございませんが、教えて頂けないでしょうか?
> 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

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

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