| タイトル | : Re^2: EXCELが止まらない |  
| 記事No | : 11305 |  
| 投稿日 | : 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 を解放
   すみません  よろしくお願いいたします 
 
 |