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

タイトル Re: Globalオブジェクトのエラーについて
投稿日: 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"

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

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