コードリスト1を実行しても

EXCELプロセスは残らないのですが、

コードリスト2を実行すると
EXCELプロセスが残ってしまいます。

http://d.hatena.ne.jp/akio0911/20070518/1179471653

EXCELプロセスが残ってしまう現象を回避するための
修正案を示してください。

回答の条件
  • 1人1回まで
  • 登録:2007/05/18 16:04:02
  • 終了:2007/05/18 18:55:45

ベストアンサー

id:mj99 No.2

mj99回答回数138ベストアンサー獲得回数382007/05/18 18:02:49

ポイント35pt
xlBorder = xlSelection.Borders(8)

これを下記のように直す

xlBorders = xlSelection.Borders
xlBorder = xlBorders(8)

で、xlBordersとxlBorderと両方の開放が必要です。

----

下記サンプルではプロセスが残らないことを確認済み。

Dim xlApp As New Excel.Application
Dim xlbooks As Excel.Workbooks = xlApp.Workbooks
Dim xlbook As Excel.Workbook = xlbooks.Add
Dim xlRange As Excel.Range = xlApp.Selection
Dim xlBorders As Excel.Borders = xlRange.Borders
Dim xlBorder As Excel.Border = xlBorders(Excel.XlBordersIndex.xlEdgeBottom)

xlBorder.LineStyle = Excel.XlLineStyle.xlDot
xlbook.Close(False) ' 保存しないで閉じる
xlApp.Quit()

System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBorder)
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBorders)
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlRange)
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlbook)
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlbooks)
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp)

(....イヤになるほど使いづらいですよね.....)

id:akio0911

>で、xlBordersとxlBorderと両方の開放が必要です。

なるほど。

>(....イヤになるほど使いづらいですよね.....)

そうですね。

何とかしてほしいものです。

2007/05/18 18:18:26

その他の回答(1件)

id:F-15X No.1

F-15X回答回数111ベストアンサー獲得回数132007/05/18 17:36:50

ポイント35pt

TimberLandChapelのTech Blogより

【VB.NET】VB.NET から Excel の COM オブジェクトを操作する場合の注意点

Excel COM オブジェクトを正しく解放するためのコツ

「.(ドット)」を使用して,プロパティやメソッドを経由して呼び出してはいけない。


xlBorder = xlSelection.Borders(8) 'xlEdgeTop=8

id:akio0911

これを解決するためには

どのように書き換えてやれば良いのでしょうか?

2007/05/18 17:41:43
id:mj99 No.2

mj99回答回数138ベストアンサー獲得回数382007/05/18 18:02:49ここでベストアンサー

ポイント35pt
xlBorder = xlSelection.Borders(8)

これを下記のように直す

xlBorders = xlSelection.Borders
xlBorder = xlBorders(8)

で、xlBordersとxlBorderと両方の開放が必要です。

----

下記サンプルではプロセスが残らないことを確認済み。

Dim xlApp As New Excel.Application
Dim xlbooks As Excel.Workbooks = xlApp.Workbooks
Dim xlbook As Excel.Workbook = xlbooks.Add
Dim xlRange As Excel.Range = xlApp.Selection
Dim xlBorders As Excel.Borders = xlRange.Borders
Dim xlBorder As Excel.Border = xlBorders(Excel.XlBordersIndex.xlEdgeBottom)

xlBorder.LineStyle = Excel.XlLineStyle.xlDot
xlbook.Close(False) ' 保存しないで閉じる
xlApp.Quit()

System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBorder)
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBorders)
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlRange)
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlbook)
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlbooks)
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp)

(....イヤになるほど使いづらいですよね.....)

id:akio0911

>で、xlBordersとxlBorderと両方の開放が必要です。

なるほど。

>(....イヤになるほど使いづらいですよね.....)

そうですね。

何とかしてほしいものです。

2007/05/18 18:18:26
  • id:F-15X
    すみません。
    間違えました。
    ポイントは不要です。
  • id:F-15X
    こちらのページにComオブジェクトを解放するプロシジャがあります。
    http://www.bcap.co.jp/hanafusa/dotnet/Excel01.htm
    http://hanatyan.sakura.ne.jp/dotnet/Excel08.htm
    こちらのプロシジャを使用してみてはいかがでしょうか?
    Private Sub MRComObject(ByRef objCom As Object)

  • id:F-15X
    ほんとに使いづらいですね。
    タイムリーにも、私もVBでXLを使う用事があったのですが、COMでの操作は止める方向で行こうと思います。
    VBからはマクロ付のXLをキックするのみとし、そのXLで作表などを行うようにしようと思います。(XLの事はXLでやらせようと思う)
    データの受け渡しは、これから考えようと思います。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません