投稿者 るしぇ  (社会人) 投稿日時 2009/1/6 04:26:24
Public Class Form1
  ・・・
  Dim xlApp As New Excel.Application
この書き方だと、Form1 が New された時に xlApp が New されます。

その後、
  xlApp.Quit()                    'Excelを閉じる 
  MRComObject(xlApp)              'xlApp を解放
するのですから、New したオブジェクトは破棄されます。

再度、使うときはもう一度 New する必要があります。
・・・当然ですよね?それほど難しい内容では無いはずです。

Class は紙の設計図です。紙に書いた電卓では計算
できませんよね?New はメモリ上に実際に計算できる
部品で電卓を作る命令です。
破棄したら分解されて分別ゴミになってしまいます。
もう一度使いたいなら、部品を集めて作り直します。

また、
  xlBook = xlBooks.Open(xlFilePath)
既存の Book を開くのですから、開いた時点で
保存されていたファイルの Book が実体化します。
それを参照すればいいだけですから、
Public Class Form1
  ・・・
  Dim xlBook As New Excel.Workbook
この New は必要ありません。

xlApp はプログラム起動時から終了時まで保持するのですか?
なら、
  xlApp.Quit()                    'Excelを閉じる 
  MRComObject(xlApp)              'xlApp を解放
閉じなければ(破棄しなければ)いいのでは?

ただし、xlApp を解放する処理をプログラムを終了する時に
実行する必要があります。また、接続しっぱなしなので関数名も
変えたほうがいいですね。

---------------------------------------------------
ここから別案
接続終了を意識するなら、Form の New 時は変数宣言だけに
します。
Public Class Form1
  Dim 保存 As String
  Dim システム As String
  Dim xlApp As Excel.Application
  Dim xlBooks As Excel.Workbooks
  Dim xlBook As Excel.Workbook
  Dim xlSheets As Excel.Sheets
  Dim xlSheet As Excel.Worksheet

接続時に New します。
Private Sub 接続(ByVal FileName)
  Dim xlFilePath As String = FileName
  xlApp = New Excel.Application
  xlBooks = xlApp.Workbooks
  xlBook = xlBooks.Open(xlFilePath)
  xlSheets = xlBook.Worksheets
  xlSheet = xlSheets.Item(1)

接続と接続終了の対応関係に注意してみてください。