タイトル | : 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"
|