分類:[VB.NET/VB2005 以降]
2009/05/27(Wed) 14:20:45 編集(投稿者)
お世話になります。
現在、VB2008にて、Windowsフォームの内容をExcelに書き込むという処理をしています。
既存のExcelファイルを開き、DataGridViewとTextBoxの値を書き込んだ後、別名を付けて保存するという
仕様にするためにソースを書いたのですが、タスクマネージャーで確認すると、プロセスが残っており、
正しく終了することができません。
大変申し訳ないのですが、以下のソースの中から、解放処理について間違っている部分をご指摘していただけないでしょうか。
以下が、そのソースになります。
Private Sub Sample()
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
'---------------------
' EXCELファイルを開く
'---------------------
xlApp = CreateObject("Excel.Application") 'Application生成
xlBook = xlApp.Workbooks.Open("C:\TEMP\sample.xls")
xlApp.Visible = True
xlSheet = DirectCast(xlBook.ActiveSheet, Excel.Worksheet) 'Worksheet
'--------------
' シートの編集
'--------------
'TextBoxの値を特定のCellに書き込む。
Dim xlCells As Excel.Range = xlSheet.Cells
Dim xlCell As Excel.Range = xlCells(3, 1)
xlCell.Value = TextBox1.Text
Dim xlce As Excel.Range = xlCells(3, 2)
xlce.Value = TextBox2.Text
Dim xlcel As Excel.Range = xlCells(3, 12)
xlcel.Value = TextBox3.Text
'DataGridViewの内容をExcelに書き込む。
Dim X As Integer = 0
Dim Y As Integer = 0
'ループでDataGridViewの指定した範囲の値を書き込む
For i As Integer = 0 To DataGridView1.Rows.Count - 1
For j As Integer = 0 To DataGridView1.Columns.Count - 1
If j < 16 Then
'書き込みは6行目から行う。
If j <> 6 Then
DirectCast(xlSheet.Cells(i + 6, j + 1), Excel.Range).Value = DataGridView1(j, i).Value
End If
End If
'特定の位置のCellの値が2の場合は、その行の色を変更する。
If DataGridView1(5, i).Value = 2 Then
xlSheet.Range(xlSheet.Cells(i + 6, 1), xlSheet.Cells(i + 6, 16)).Interior.ColorIndex = 45
ElseIf DataGridView1(5, i).Value = 3 Then
xlSheet.Range(xlSheet.Cells(i + 6, 1), xlSheet.Cells(i + 6, 16)).Interior.ColorIndex = 37
End If
Next j
Next i
'保存時の問合せを非表示に設定。
xlApp.DisplayAlerts = False
'Worksheet を名前をつけて保存します。
xlSheet.SaveAs("C:\TEMP\test.xls")
MRComObject(xlCells)
MRComObject(xlCells)
MRComObject(xlCells)
MRComObject(xlCells)
MRComObject(xlCells)
MRComObject(xlCells)
MRComObject(xlSheet) 'xlSheet の解放
MRComObject(xlBook) 'xlBook の解放
xlApp.Quit() 'Excelを閉じる
MRComObject(xlApp) 'xlApp を解放
'保存するExcelファイルの解放・終了処理
'解放処理を行う
MRComObject(xlSheet) 'xlSheet の解放
MRComObject(xlBook) 'xlBook の解放
'xlApp.Quit() 'Excelを閉じる
MRComObject(xlApp) 'xlApp を解放
'*********************
' 解放処理
'*********************
xlCells
xlSheet = Nothing
xlBook = Nothing
xlApp = Nothing
End Sub
長文になってしまい、申し訳ありません。
サイトなどを見て、違う書き方やなどを試しても見たのですが、どうしても原因や間違った部分が分かりませんでした。
大変恐縮ですが、よろしくお願いいたします。