| タイトル | : Re: Globalオブジェクトのエラーについて |  
| 記事No | : 11282 |  
| 投稿日 | : 2014/06/19(Thu) 19:56 |  
| 投稿者 | : 魔界の仮面弁士  |  
 まず、根本的な間違いがあります。
  > System.Runtime.InteropServices.Marshal.IsComObject(xlApp)      'xlApp を解放
  IsComObject は、『解放』のための命令ではありません。 相手が「COM コンポーネント(ActiveXオブジェクト)」で あるかどうかを調べ、True/False を返すだけのメソッドです。
  それゆえ、提示されたコードは、そもそもオブジェクトの解放処理が 一切記述されていないという事態になります。恐らくはそれが原因かと。
  かわりに、ReleaseComObject メソッドを呼び出すようにしてみてください。
  http://hanatyan.sakura.ne.jp/vb2005/vb2005excel01.htm
 
  > Dim xlBooks As Excel.Workbooks = xlApp.Workbooks > Dim xlBook As Excel.Workbook = xlBooks.Open(pUserXltName)
  この部分は問題無さそうですね。VB.NET から扱う場合は、  xlBook = xlApp.Workbooks.Open(pUserXltName) のように記述するのではなく、一度、Workbooks コレクションを  xlBooks = xlApp.Workbooks  xlBook = xlBooks.Open(pUserXltName)  のように、変数に格納しておく必要があります。(後ほど、それらを明示的に解放するために)
 
  > Dim xlSheet As Excel.Worksheet = CType(xlBook.Worksheets("Sheet4"), Excel.Worksheet) このコードは望ましくありません。 Workbooks と同様、Sheets コレクションも一度変数に格納しておいて下さい。すなわち、  xlSheet = xlBook.Worksheets("Sheet4") ではなく、  xlSheets = xlBook.Worksheets  xlSheet = xlSheets("Sheet4")   'xlSheet を Worksheet 型で扱いたい場合は、明示的にキャストしましょう のように記述せねばならないということです。
 
 
  > xlSheet.Cells(1, 1).Value = "test" Cells プロパティは引数を伴わないプロパティです。 Cells プロパティを Range 型の変数に代入し、それを利用しましょう。
  yuki = xlSheet.Cells hanatyan = yuki(1,1)     'hanatyan = yuki.Items(1,1) の意味 hanatyan.Value = "test" 
 
 |