前のログです。↓
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200606/06060105.txt
いつもお世話になっております。良です。
前のログでエクセルのプレビュー画面は表示できたんですが
×ボタンで終了して窓も全て閉じていますしどこにも
エクセルの痕跡はないのですがプログラムを終了して
パソコンをシャットダウンしようとしたら
「エクセルを終了できません」というエラーが出て
パソコンをシャットダウンできませんでした。
必要なCOMオブジェクトは全て解放したつもりなんですが
やっぱり
''Excel を終了する
'xlApplication.Quit()
をはずしたのがいけないのでしょうか?
以下ソースになります。
Dim xlApplication As New Excel.Application
Dim xlBooks As Excel.Workbooks = xlApplication.Workbooks
'新規のファイルを開く場合
Dim xlBook As Excel.Workbook = xlBooks.Add
Dim xlSheets As Excel.Sheets = xlBook.Worksheets
Dim xlSheet As Excel.Worksheet = xlSheets.Item(1)
'xlApplication から WorkBooks を取得する
xlBooks = xlApplication.Workbooks
Dim xlRange As Excel.Range
Dim strData(3, 0) As Object
xlRange = xlSheet.Range("A8:A10") 'データの入力セル範囲
strData(0, 0) = "1000" 'データの作成
strData(1, 0) = "20000"
strData(2, 0) = "205"
strData(3, 0) = "=Sum(A8:A10)" '計算式
xlRange.Value = strData 'セルへデータの入力
' Excel を表示する
xlApplication.Visible = True
' COM オブジェクトを解放する (正しくは COM オブジェクトを解放する を参照)
ComObjectRelease(xlSheet) 'xlSheet の解放
ComObjectRelease(xlSheets)
ComObjectRelease(xlBook)
ComObjectRelease(xlBooks)
Private Sub ComObjectRelease(ByRef objCom As Object)
明示的に COM オブジェクトへの参照を解放
Try
If Not objCom Is Nothing AndAlso System.Runtime.InteropServices. _
Marshal.IsComObject(objCom) Then
Dim I As Integer
Do
I = System.Runtime.InteropServices.Marshal.ReleaseComObject(objCom)
Loop Until I <= 0
End If
Catch
Finally
'参照を解除する
objCom = Nothing
End Try
End Sub
> Dim xlBooks As Excel.Workbooks = xlApplication.Workbooks
ここで、Workbooks のインスタンスを取得してあるのに、
> 'xlApplication から WorkBooks を取得する
> xlBooks = xlApplication.Workbooks
何故、ここで再取得しているのでしょう? (ここに問題があるのかな?)
あと、安全策をとるならば、オブジェクトの生成から解放までを
Try〜Finally に含めておいた方が良いと思います。
こんにちは良です。
>魔界の仮面弁士さん
早速お返事ありがとうございます!
とりあえず試してみます。またお返事書きます。
追加で、今までデバッグ中にエラーで落ちた…とかで残ってたプロセスが
ずーっと残ってて悪さをする場合もあります。
http://www.bcap.co.jp/hanafusa/dotnet/Excel01.htm
>'テスト中は、下記コードを 上記 Excel 終了後に実施するようにして下さい。
や、タスクマネージャで EXCEL.EXE のプロセスが全て終了している状態から
テストを開始してください。一度ログオフしても消えると思います。
Try〜Finally の参考にどうぞ。
[じゃんぬねっと COM オブジェクトを解放する]
http://jeanne.wankuma.com/tips/programing/releasecom.html
こんにちは良です。
>特攻隊長まるるうさん
またまたお返事ありがとうございます!
>http://www.bcap.co.jp/hanafusa/dotnet/Excel01.htm
>'テスト中は、下記コードを 上記 Excel 終了後に実施するようにして下さ>>い。
>や、タスクマネージャで EXCEL.EXE のプロセスが全て終了している状態か>>ら
>テストを開始してください。一度ログオフしても消えると思います。
は一度ためしてみたんですが間違ってオブジェクト開放する前に
このプログラムをコピペしてしまい、見事に全部オブジェクトが残っていました(^_^;)
今度は使う位置を間違えないようにします!
本当にありがとうございましたm(__)m
ツイート | ![]() |