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

タイトル Re^2: EXCELが止まらない
投稿日: 2014/08/15(Fri) 23:06
投稿者かっちゃん
> >    xlsInbook = xlsInBooks.Open(“ABC.xls”)
> 「"」ですよね実際は。
> 「”」では無く。
>
>
> > ** DimB=A.SpecialCells(Microsoft.Office.Interop.Excel.XlCellType.xlCellTypeLastCell)
> 「Dim B」ですよね実際は。
>
> > **' B.Row から最終行を確認しています
> その部分のコードも見せてください。
>
> > エクセルを終了する
> 解放処理(Marshal.ReleaseComObject メソッド)の呼び出しは何処に?
> http://hanatyan.sakura.ne.jp/vb2005/vb2005excel01.htm

すみません
ロジックを分かりやすいように簡略したつもりでしたが、
実際のロジックに直してみます

WINDOWS7でVB2010よりEXCEL2010を使っております

** VB2010の構文 **

エクセルシートはDの直下にABC.xlsで保存されています

  Dim wkintLastSu As Integer ' エクセル件数
  Call WinkOBJ.SetInXls(0, 0, "D:\", "ABC", "sheet1", 0, 0, 0, 0, "", "")
  wkintLastSu = WinkOBJ.NI


  Imports XL = Microsoft.Office.Interop.Excel

エクセルワークエリア
    Private xlsInApp As XL.Application
    Private xlsInBooks As XL.Workbooks
    Private xlsInbook As XL.Workbook
    Private xlsInSheets As XL.Sheets
    Private xlsInSheet As XL.Worksheet


    Public Sub SetInXls(ByVal Flag As Byte, ByVal SubFl As Byte, ByVal FrmItem As String, ByVal  
     strItem As String, ByVal SubstrIm As String, ByVal bytItem As Byte, ByVal shoItem As Short,
     ByVal intItem As Integer, ByVal lngItem As Long, ByVal TblX As String, ByVal TblY As String)
      ' Excel起動
        xlsInApp = New XL.Application
    
      ' 既存のエクセルシート使用
        xlsInBooks = xlsInApp.Workbooks
        xlsInbook = xlsInBooks.Open(Trim(FrmItem) & Trim(strItem) & ".xls")
        xlsInSheets = xlsInbook.Worksheets
        xlsInSheet = xlsInSheets(Trim(SubstrIm))
  
     ' シート解放
        MRComObject(xlsInSheet)            'xlsSheet の解放
        MRComObject(xlsInSheets)           'xlsSheets の解放
      ' エクセルを保存せず終了する
        xlsInbook.Close(False)
      ' ブック解放
        MRComObject(xlsInbook)             'xlsBook の解放
        MRComObject(xlsInBooks)            'xlsBooks の解放

        xlsInApp.Quit()                    'Excelを閉じる
        MRComObject(xlsInApp)              'xlsApp を解放
    End Sub


    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)
                      Debug.WriteLine(count)
                End If
            End If
          Finally
            objCom = Nothing
        End Try
    End Sub


  上記ですとEXCELが終了します。

  下記のようにシートの最終行を確認する構文を入れますとEXCELが終了しなくなります
      ' 既存のエクセルシート使用
        xlsInBooks = xlsInApp.Workbooks
        xlsInbook = xlsInBooks.Open(Trim(FrmItem) & Trim(strItem) & ".xls")
        xlsInSheets = xlsInbook.Worksheets
        xlsInSheet = xlsInSheets(Trim(SubstrIm))
  
      '*******シートの最終セルを選択します*******
        Dim A = xlsInSheet.Cells
        Dim B = A.SpecialCells(Microsoft.Office.Interop.Excel.XlCellType.xlCellTypeLastCell)
      '最終行を表示しています
        wkintItem = B.Row
      '******************************************

     ' シート解放
        MRComObject(xlsInSheet)            'xlsSheet の解放
        MRComObject(xlsInSheets)           'xlsSheets の解放
      ' エクセルを保存せず終了する
        xlsInbook.Close(False)
      ' ブック解放
        MRComObject(xlsInbook)             'xlsBook の解放
        MRComObject(xlsInBooks)            'xlsBooks の解放

        xlsInApp.Quit()                    'Excelを閉じる
        MRComObject(xlsInApp)              'xlsApp を解放

すみません
よろしくお願いいたします

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

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