VB2008からのEXCEL出力に関して

このQ&Aのポイント
  • VB2008で開発を行っている際に、データをEXCELに出力する処理を行いたい場合、どのように記述すればいいかについて質問しています。
  • すでに1シート目までの出力は正しく行われ、問題なくプロセスも終了できていますが、指定行までデータが書き込まれたら、新しいシートを追加して次のシートに記載するループ処理の記述方法が分からないという問題について質問しています。
  • ループ処理においてどの部分をループ対象にすればいいかが分からないため、教えて欲しいという要望をしています。
回答を見る
  • ベストアンサー

VB2008からのEXCEL出力に関して

VB2008にて開発を行っていますが、その中で、あるデータをEXCELに出力するような 処理を行いたいと考えています。 その際に、ホームページ等で検索を行いながら、以下のような記述をしましたが、やはり 中身を完全に理解していない為、あまり応用がききません。。。 以下の内容で、1シート目までの出力は正しく行われ、問題なくプロセスも残らずに終了 する事ができました。 ただし、指定の行(10行目)までデータが書き込まれたら、1シートを追加して 次のシートに記載するというようなループ処理を考えていますが、どのように記述したら 良いでしょうか。。。。 どこまでをループ対象にすれば良いかが。。。 教えて下さい。 よろしくお願いします。 《記述内容》 '既存のEXCELファイルを開く Dim xlFilePath As String = "C:\order.xls" '起動時の処理 Dim xlApp As New Excel.Application Dim xlBooks As Excel.Workbooks = xlApp.Workbooks Dim xlBook As Excel.Workbook = xlBooks.Open(xlFilePath) xlApp.Visible = True ' 確認のためExcelのウィンドウを表示する Dim xlSheets As Excel.Sheets = xlBook.Worksheets Dim xlSheet As Excel.Worksheet = CType(xlSheets.Item(1), Excel.Worksheet) Dim x, y As Integer x = 0 y = 0 'データをEXCELファイルに書き出し Dim xlRange As Excel.Range Dim strDat(14, 14) As Object xlRange = xlSheet.Range("A17:O31") 'データの入力セル範囲 Do While x < count strDat(x, 1) = h_date(x).IN_指示納期 strDat(x, 2) = h_date(x).IN_発注番号 strDat(x, 5) = h_date(x).IN_品目名称 strDat(x, 8) = h_date(x).IN_メーカー名 strDat(x, 9) = h_date(x).IN_数量 strDat(x, 10) = h_date(x).IN_単価 strDat(x, 11) = h_date(x).IN_金額 strDat(x, 12) = h_date(x).IN_備考 xlRange.Value = strDat 'セルへデータの入力 x = x + 1 Loop 'System.Runtime.InteropServices.Marshal.ReleaseComObject(strDat) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlRange) xlBooks.Close() xlApp.DisplayAlerts = False xlApp.Quit() ' COM オブジェクトの解放 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBooks) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheets) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet) ' Excel のプロセス終了 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp)

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

>指定の行(10行目)までデータが書き込まれたら、1シートを追加して次のシートに記載するというようなループ処理を考えていますが ここ(実例)が詳しく判らないので、役立たないかもしれないが、1シート分でやってみると、下記で (わたしの例では)Sheet9のセル範囲A16:D20に 番号 品名 価格 産地 1001 りんご 100 青森 1002 みかん 150 愛媛 1003 バナナ 200 台湾 1004 柿 150 奈良 となりました。(質問の例を変えているが。4列の4行の例) 下記では配列からセルにデータを1行のコードへセットしている。(Loopは不要) もちろん沢山行数が在る尾だろうから、それであれば、データ数で区切って、都度新しいシートを作り、そこへ書き出す繰り返しが必要。 シートの挿入は xlBook.Sheets.Add.name = "aaa" で出来た(VBAと同じ書き方)。 ーー セルへのデータのセットも下記は一旦配列にセットして、一括代入しているが Range()=・・・のようなVBAの書き方で良いのでは。 ーーー コマンドボタン4をキッカケに実行する例。 Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click '既存のEXCELファイルを開く Dim xlFilePath As String = "C:\Documents and Settings\XXXX\My Documents\コピー01化.xls" '起動時の処理 Dim xlApp As New Excel.Application Dim xlBooks As Excel.Workbooks = xlApp.Workbooks Dim xlBook As Excel.Workbook = xlBooks.Open(xlFilePath) xlApp.Visible = True ' 確認のためExcelのウィンドウを表示する Dim xlSheets As Excel.Sheets = xlBook.Worksheets Dim sh = xlSheets(9) 'Dim xlSheet As Excel.Worksheet = CType(xlSheets.Item(1), Excel.Worksheet) 'データをEXCELファイルに書き出し Dim xlRange As Excel.Range 'Dim strDat(14, 14) xlRange = sh.Range("A17:D20") 'データの入力セル範囲 '---データ作成 sh.range("A16") = "番号" sh.range("B16") = "品名" sh.range("C16") = "価格" sh.range("D16") = "産地" 'strDat(x, 2) = h_date(x).IN_発注番号 'strDat(x, 3) = h_date(x).IN_品目名称 'strDat(x, 4) = h_date(x).IN_メーカー名 'strDat(x, 9) = h_date(x).IN_数量 'strDat(x, 10) = h_date(x).IN_単価 'strDat(x, 11) = h_date(x).IN_金額 'strDat(x, 12) = h_date(x).IN_備考 Dim myData(3, 3) As Object myData(0, 0) = 1001 myData(1, 0) = 1002 myData(2, 0) = 1003 myData(3, 0) = 1004 myData(0, 1) = "りんご" myData(1, 1) = "みかん" myData(2, 1) = "バナナ" myData(3, 1) = "柿" myData(0, 2) = 100 myData(1, 2) = 150 myData(2, 2) = 200 myData(3, 2) = 150 myData(0, 3) = "青森" myData(1, 3) = "愛媛" myData(2, 3) = "台湾" myData(3, 3) = "奈良" xlRange.Value = myData 'セルへデータの入力 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlRange) xlBooks.Close() xlApp.DisplayAlerts = False xlApp.Quit() ' COM オブジェクトの解放 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBooks) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheets) System.Runtime.InteropServices.Marshal.ReleaseComObject(sh) ' Excel のプロセス終了 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp) End Sub End Class

その他の回答 (2)

  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.2

>上記のように私もVBAでは理解ができ、記述もできますが、やはりVB2008となると >どうもどのように記述するのが正しいかわかりません。 同じだよ。参照設定してる時点で実行されるコマンドまで全く同じ。 VBから命令すると、実際の処理はエクセルが実行するからね。 それにCOM オブジェクトの解放の為の手順を加えるだけ。 そもそも質問は > どこまでをループ対象にすれば良いかが。。。 なんだから、Cor_moriyan さんのサンプルで十分すぎるわ。

回答No.1

私はVBAが主なので・・・VBAで書きます。以下、ソースが参考になれば。 Sub ex()   Dim wb       As Workbook   Dim ws       As Worksheet   Dim rg       As Range   Dim strDat(2, 2)  As String   Dim x        As Integer   Dim y        As Integer   Dim z        As Integer      Set wb = ThisWorkbook   Set ws = wb.Worksheets("Sheet1")        For z = 1 To 3     Set ws = wb.Worksheets.Add(After:=ws)     Set rg = ws.Range("A1:C3")     For y = 1 To 10       For x = 0 To 2         strDat(x, 0) = "aaa" & y & x         strDat(x, 1) = "bbb" & y & x         strDat(x, 2) = "ccc" & y & x       Next       rg.Value = strDat       Set rg = rg.Offset(x, 0)     Next   Next End Sub シートを Sheet1 の後ろに追加し、配列strDatに代入された値を10セット、セルへセット。新しいシートを作成してさらに10セット。。。 質問者さんは > xlRange.Value = strDat 'セルへデータの入力 をDo~Loopの中に記述していますが。配列の中身を一気にセル範囲へセットするなら、Do~Loopの外で行わないと(^^;

SANA_999
質問者

お礼

教えて頂きありがとうございます。 確かに、xlRange.Value = strDat は外でしたね! 上記のように私もVBAでは理解ができ、記述もできますが、やはりVB2008となると どうもどのように記述するのが正しいかわかりません。 せっかく教えて頂いたのに申し訳ありません、

関連するQ&A

  • VB.NETからEXCELの起動が、うまくいかない

    3回目の同じ質問になってしまうのですがよろしくお願いいたします。 下記のようなソースでEXCELファイルを作成し、その後ファイルを開くという処理をしています。 Dim xlApp As New Excel.Application Dim xlBooks As Excel.Workbooks = xlApp.Workbooks Dim xlBook As Excel.Workbook = xlBooks.Add Dim xlSheets As Excel.Sheets = xlBook.Worksheets Dim xlSheet As Excel.Worksheet = xlSheets.Item(1) Dim xlRange As Excel.Range Dim xlCells As Excel.Range = xlSheet.Cells xlRange = xlCells(1, 10) xlRange.Value = "--" xlRange = xlCells(1, 5) xlCells.EntireColumn.AutoFit() xlBook.SaveAs(sPath & "\" & sFileName, Excel.XlFileFormat.xlWorkbookNormal) System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlCells) System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlRange) System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlSheet) System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlSheets) xlCells = Nothing xlRange = Nothing xlSheet = Nothing xlSheets = Nothing xlBook.Close() System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlBook) System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlBooks) xlBook = Nothing xlBooks = Nothing xlApp.Quit() System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlApp) xlApp = Nothing GC.Collect() System.Diagnostics.Process.Start(sPath & "\" & sFileName) ある特定のPCでのみEXCELのメニューバーとステータスバーのみしか表示されない状態です。 起動部分(Process.Start)をコメントアウトして確認したところ GC.COLLECTでEXCELが終了することなく、アプリの終了時にEXCELが終了する 状態にあります。 これはオブジェクトの開放がうまくいっていないのでしょうか? よろしくお願いいたします。

  • EXCELのプロセスに関して2

    教えて下さい。 先日もEXCELに関して投稿させて頂きましたが、やはり少しソースを変更すると、最終的に EXCELのプロセスが残ってしまいます。 前回は、記述の最後に、"GC.Collect"を追加するようにご指摘頂き、余計なメモリを解放する事で、 プロセスは残らないようになりましたが、今回は、以下の記述のように、発注先コードが違った場合、 シートを分けるという事をしたい為、以下のような記述をした際に、プロセスが残ってしまう現象が 発生しました。 切り分けを行った結果、やはり*****印の部分があるかないかで、プロセスが残る現象が発生しますが、 何かプロセスを残してしまうような記述をしているのでしょうか。。。 どなたか教えて頂ければ幸いです。 よろしくお願いします。 《記述内容》 '既存のEXCELファイルを開く Dim xlFilePath As String = "C:\order.xls" '起動時の処理 Dim xlApp As New Excel.Application Dim xlBooks As Excel.Workbooks = xlApp.Workbooks Dim xlBook As Excel.Workbook = xlBooks.Open(xlFilePath) '確認のためExcelのウィンドウを表示する xlApp.Visible = True Dim xlSheets As Excel.Sheets = xlBook.Worksheets Dim xlSheet As Excel.Worksheet = CType(xlSheets.Item(1), Excel.Worksheet) 'シートの選択 xlSheet = xlSheets.Item(1) 'シートのコピー xlSheet.Copy(After:=xlBook.Worksheets(1)) '再度シートを選択 xlSheet = xlSheets.Item(2) 'シートに名前を付ける xlSheet.Name = "zz" Dim x, y As Integer x = 0 y = 0 Dim mcount As Integer Dim fcount As Integer Dim D_発注先コード As String D_発注先コード = h_date(0).IN_発注先コード Dim strDat(14, 14) As Object For icount As Integer = 0 To count - 1 If D_発注先コード <> h_date(icount).IN_発注先コード Then 'データをEXCELファイルに書き出し Dim xlRange As Excel.Range 'データの入力セル範囲 xlRange = xlSheet.Range("A17:O31") 'セルへデータの入力 xlRange.Value = strDat System.Runtime.InteropServices.Marshal.ReleaseComObject(xlRange) D_発注先コード = h_date(icount).IN_発注先コード x = 0 *********************************************************************** xlSheet = xlSheets.Item(1) 'シートの選択 xlSheet.Copy(After:=xlBook.Worksheets(2)) 'シートのコピー xlSheet = xlSheets.Item(3) '再度シートを選択 xlSheet.Name = "YY" 'シートに名前を付ける *********************************************************************** strDat(x, 1) = h_date(icount).IN_指示納期 strDat(x, 2) = h_date(icount).IN_発注番号 fcount = 1 Else strDat(x, 1) = h_date(icount).IN_指示納期 strDat(x, 2) = h_date(icount).IN_発注番号 End If x = x + 1 Next Dim xlRange3 As Excel.Range 'データの入力セル範囲 xlRange3 = xlSheet.Range("A17:O31") 'セルへデータの入力 xlRange3.Value = strDat 'COM オブジェクトの解放 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlRange3) xlBooks.Close() xlApp.DisplayAlerts = False xlApp.Quit() 'COM オブジェクトの解放 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBooks) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheets) 'Excel のプロセス終了 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp) GC.Collect()

  • EXCELファイルからの値取得に関して

    環境:Visual Basic 2008 教えて下さい。 画面上から2つのEXCELファイルを指定し、1回の処理でその2つの EXCELからそれぞれ値を取得したいと考えています。 その為、以下のような記述をしましたが、2回目の値取得のところで "オブジェクト参照がオブジェクト インスタンスに設定されていません。" というエラーメッセージとなってしまいます。 1つのファイルから取得する事は経験ありましたが、同時に2回は初めてで ある為、記述方法が正しいのか、、、 どのように記述したら良いかを教えて下さい。 初歩的な質問で申し訳ありませんが、よろしくお願いします。 《記述内容》 'EXCELファイルを開く Dim xlFilePath As String = ofd1.FileName '起動時の処理 Dim xlApp As Object xlApp = CreateObject("Excel.Application") Dim xlBooks As Object = xlApp.Workbooks Dim xlBook As Object = xlBooks.Open(xlFilePath) '現シート数 Dim S_COUNT As Integer = xlBook.Worksheets.Count Dim xlSheets As Object = xlBook.Worksheets Dim xlSheet As Object = CType(xlSheets.Item(1), Object) '現シート数 S_COUNT = xlBook.Worksheets.Count Dim R_名称 As String R_名称 = "" R_名称 = xlSheet.Cells(1, 1).Value 'COM オブジェクトの解放 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheets) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBooks) 'Excel のプロセス終了 xlApp.DisplayAlerts = False xlApp.Quit() System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp) GC.Collect() 'のEXCELファイルを開く Dim xlFilePath2 As String = ofd2.FileName '起動時の処理 Dim xlApp2 As Object xlApp2 = CreateObject("Excel.Application") Dim xlBooks2 As Object = xlApp2.Workbooks Dim xlBook2 As Object = xlBooks2.Open(xlFilePath2) '現シート数 Dim S_COUNT2 As Integer = xlBook2.Worksheets.Count Dim xlSheets2 As Object = xlBook2.Worksheets Dim xlSheet2 As Object = CType(xlSheets2.Item(1), Object) '現シート数 S_COUNT = xlBook2.Worksheets.Count Dim R_番号 As String R_番号 = "" R_番号 = xlSheet2.Cells(I_COUNT2, 1).Value 'COM オブジェクトの解放 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheets) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBooks) 'Excel のプロセス終了 xlApp.DisplayAlerts = False xlApp.Quit() System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp) GC.Collect()

  • EXCELのプロセスに関して

    教えて下さい。 VB2008でEXCELを操作しようと考えていますが、以下のような記述をした場合、 EXCELのプロセスが残ってしまいます。 いろいろ調査し、いらない部分を削除した結果、以下のところまで絞込みを行い、 ****のところを削除した場合、問題なくプロセスは終了した為、****印の中の記述が 原因というところまで絞れました。 単純にブックの中のシートをコピーで追加しているだけですが、何がどのようにすれば プロセスは残らずに消えてくれるでしょうか。。。 よろしくお願いします。 《記述内容》 '既存のEXCELファイルを開く Dim xlFilePath As String = "C:\test.xls" '起動時の処理 Dim xlApp As New Excel.Application Dim xlBooks As Excel.Workbooks = xlApp.Workbooks Dim xlBook As Excel.Workbook = xlBooks.Open(xlFilePath) xlApp.Visible = True ' 確認のためExcelのウィンドウを表示する Dim xlSheets As Excel.Sheets = xlBook.Worksheets Dim xlSheet As Excel.Worksheet = CType(xlSheets.Item(1), Excel.Worksheet) ************************* xlSheet = xlSheets.Item(1) 'シートの選択 xlSheet.Copy(After:=xlBook.Worksheets(1)) 'シートのコピー xlSheet = xlSheets.Item(2) '再度シートを選択 xlSheet.Name = "zz" 'シートに名前を付ける ************************* xlBooks.Close() xlApp.DisplayAlerts = False xlApp.Quit() ' COM オブジェクトの解放 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBooks) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheets) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet) ' Excel のプロセス終了 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp)

  • VB2005でのEXCELマクロ操作

    お世話になっております。 VB2005から指定したEXCELファイルを開き、標準モジュールにあるマクロを起動したいと考えております。 調べたところ、Runメソッドを使用するようですが、マクロファイルを開くところで停止してしまいます。 以下にソースを書きましたので、アドバイス頂きたいと思います。 Dim n As Short Dim xlApp As Excel.Application = Nothing Dim xlBooks As Excel.Workbooks = Nothing Dim xlBook As Excel.Workbook = Nothing Dim xlSheets As Excel.Sheets = Nothing Dim xlSheet As Excel.Worksheet = Nothing Dim xlRange As Excel.Range = Nothing Dim Fname As String = "C:\Documents and Settings\hoge\Application Data\Microsoft\Excel\XLSTART\PERSONAL.XLS" '読み込むファイル Try xlApp = New Excel.Application() xlBooks = xlApp.Workbooks For n = 0 To fil.Length - 1 xlBook = xlBooks.Open(fil(n)) xlSheets = xlBook.Worksheets xlApp.Run("'" & Fname & "'!module2.DB処理", fil(n)) '引数をもつ処理の呼び出し方法 '1000ミリ秒(1秒)待機する System.Threading.Thread.Sleep(1000) ' Excel ブックを保存する xlApp.DisplayAlerts = False xlBook.Save() Next ' Microsoft Excel を終了する xlApp.Quit() Finally If Not xlSheet Is Nothing Then System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet) End If If Not xlSheets Is Nothing Then System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheets) End If If Not xlBook Is Nothing Then System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook) End If If Not xlBooks Is Nothing Then System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBooks) End If If Not xlApp Is Nothing Then System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp) End If End Try

  • VB2005でのEXCEL処理で警告が消えません

    いつもお世話になっております。 私はVB2005入門者です。 EXCELで処理を行っております。 処理事態は完了するのですが 下記のコードの後半部の警告がどうやっても潰せないので 修正方法のアドバイスをお願いします。 Dim xlApp As Excel.Application Dim xlBooks As Excel.Workbooks Dim xlBook As Excel.Workbook Dim xlSheets As Excel.Sheets Dim xlSheet As Excel.Worksheet ' 必要な変数は Try の外で宣言する Try ' 必要な変数は Try の中でインスタンス化する xlApp = New Excel.Application() xlBooks = xlApp.Workbooks xlBook = xlBooks.Open("C\:hoge0.xls") xlSheets = xlBook.Worksheets xlBook.Worksheets(1).Range("F4") = shhoge(0) xlBook.Worksheets(1).Range("I4") = shhoge(0) xlBook.Worksheets(1).Range("K4") = shhoge(5) xlBook.Worksheets(1).Range("M5") = shhoge(0) xlBook.Worksheets(1).Range("O4") = shhoge(1) xlBook.Worksheets(1).Range("R4") = shhoge(1) xlBook.Worksheets(1).Range("U5") = shhoge(1) xlBook.Worksheets(1).Range("T5") = shhoge(2) xlBook.Worksheets(1).Range("W5") = shhoge(3) xlBook.Worksheets(1).Range("X5") = shhoge(4) ' シートのカウントが 1 より大きければシートを削除する If xlSheets.Count > 1 Then ' Display アラートを消す xlApp.DisplayAlerts = False ' シートを削除する xlSheet = DirectCast(xlSheets(2), Excel.Worksheet) xlSheet.Delete() End If ' 1000 ミリ秒 (1秒) 待機する System.Threading.Thread.Sleep(1000) ' Excel ブックを保存する xlApp.DisplayAlerts = False xlBook.SaveAs("C:\hoge.xls") ' Microsoft Excel を終了する xlApp.Quit() Finally ' 参照したオブジェクトをすべて解放する If Not xlSheet Is Nothing Then   ←[警告]値が割り当てられる前に使用されています。 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet) End If If Not xlSheets Is Nothing Then   ←[警告]値が割り当てられる前に使用されています。 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheets) End If If Not xlBook Is Nothing Then   ←[警告]値が割り当てられる前に使用されています。 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook) End If If Not xlBooks Is Nothing Then   ←[警告]値が割り当てられる前に使用されています。 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBooks) End If If Not xlApp Is Nothing Then   ←[警告]値が割り当てられる前に使用されています。 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp) End If End Try Form2.Show() End Sub

  • EXCELプロセスの正常終了に関して

    VB2008で、EXCELにデータを出力するプログラムを作成しています。 その際に、どうしてもタスクマネージャーにプロセスが残ってしまい、なんとかプロセスが残らない ように、様々なホームページから消す方法等を検索し、実際に試してみましたが、未だ残ったままと なってしまいます。 あるホームページには、下記のように"Cell"を使用するとプロセスが残ってしまうと記載が あった為に、それを削除して実行してみましたが、やはり消えないままです。 以下のサンプルプログラムで、何をどうしたらプロセスが正常に消えてくれるでしょうか。。。 教えて頂きたいと思います。 なかなかこのEXCELのプロセスの扱いは理解しにくく、直書きとなって申し訳ありません。 よろしくお願いします。 《サンプルプログラム》 '既存のEXCELファイルを開く Dim excelName As String = "C:\order.xls" '起動時の処理 Dim xlApp As New Excel.Application Dim xlBooks As Excel.Workbook xlApp = New Excel.Application() xlApp.Visible = True ' 確認のためExcelのウィンドウを表示する ' Excelファイルをオープンする xlBooks = DirectCast((xlApp.Workbooks.Open( _ excelName, _ Type.Missing, _ Type.Missing, _ Type.Missing, _ Type.Missing, _ Type.Missing, _ Type.Missing, _ Type.Missing, _ Type.Missing, _ Type.Missing, _ Type.Missing, _ Type.Missing, _ Type.Missing)), _ Excel.Workbook) Dim xlSheets As Excel.Sheets = xlBooks.Worksheets Dim xlSheet As Excel.Worksheet = xlSheets.Item(1) Dim x, y As Integer x = 0 y = 17 'データをEXCELファイルに書き出し Do While x < 1 xlSheet.Cells(10, 1).Value = "TEST" 'こちらの書き方も出来る x = x + 1 y = y + 1 Loop xlBooks.Close(Type.Missing, Type.Missing, Type.Missing) xlApp.Quit() ' COM オブジェクトの解放 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBooks) ' Excel のプロセス終了 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp)

  • VB2005でエクセルの機能を使うには

    VB2005でエクセルに数値を貼り付けた後自動的に エクセルの機能を使ってA列で並び替えをしたいのですが可能でしょうか。 今のソース s1()の配列に数値がはいっている。 exp s1(1)="1.0,2.0,3.0,4.0......" Dim xlApp As New Excel.Application Dim xlBooks As Excel.Workbooks = xlApp.Workbooks Dim xlFilePath As String = Application.StartupPath & "\aaa.xls" Dim xlBook As Excel.Workbook = xlBooks.Open(xlFilePath) Dim xlSheets As Excel.Sheets = xlBook.Worksheets Dim xlSheet As Excel.Worksheet = xlSheets.Item(1) ':::::::::::::::::::::::::::::::::::::::::::::::sheet1 '-----貼り付け開始 Dim xlRange As Excel.Range Dim xlCells As Excel.Range Dim xlRange1 As Excel.Range xlCells = xlSheet.Cells Dim j Dim Col As String For i = 1 To irec - 1 temp = Split(s1(i), ",") For j = 0 To 12 xlRange1 = xlCells(3 + i, 1 + j) Col = xlRange1.Address(False, False) xlRange = xlSheet.Range(Col) xlRange.Value = temp(j) Next j Next i ここで並び替えしたいのですが。

  • vb2010で既存のエクセルを開くには?

    初心者です。 VB6.0からvb2010への乗り換えをしていますが、以下のコードでxlBooks = xlApplication.Workbooksのところで止まってしまいます。 参考ページをいろいろ見ましたが原因が分かりません。 実行する前のコードに波線はでません。 CreateObjectでやっても結果は同じでworkbookを作るところでエラーとなります。 エラーは「タイプライブラリのロードに失敗」ですが、であればDim xlApplication As New Excel.Application()かCreateObjectで止まるように思いますが、理由がわかりません。 WinXP, Office2003, .Net 4.0. vb2010Expressの組み合わせで全てアップデート済み、参照設定はExcel 11.0 Object Libraryです。 どなたかご教示頂ければ幸甚です。 Imports Excel = Microsoft.Office.Interop.Excel Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim xlApplication As New Excel.Application() Dim xlBooks As Excel.Workbooks xlBooks = xlApplication.Workbooks xlBooks.Open("C:\Hoge.xls") - - System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBooks) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApplication) End Sub End Class

  • VB.NET EXCEL

    下記のコードで、アプリケーション実行中 EXCELが起動したままになり アプリケーション終了時に、EXCELも一緒に終了する という、タスクマネージャーに残るという動作になります。 どこの COM の扱い方がまずかったのでしょうか? 教えてください。お願いします。 ※文字数制限で、SQLコネクション周り、SQL系宣言 エラー処理を消しました。 ※EXCEL周りに関してはすべてそのままです。 変数に代入している COMオブジェクトをすべて Marshal.FinalReleaseComObject してもEXCELが終了しないので何かしら COMオブジェクトを見落としていると思うのですが どれだかわかりません。 よろしくお願いします Imports Microsoft.Office.Interop Imports System.Runtime.InteropServices Public Class Cls_Print_Excel Public Sub S_Print_Excel() 'エクセルアクセス用 Dim _xslFile As String = "C:\base.xls" Dim objExcel As Excel.Application = Nothing Dim objWorkBook As Excel.Workbook = Nothing Dim objWorkBooks As Excel.Workbooks = Nothing Dim xlSheet As Excel.Worksheet = Nothing Dim xlRange As Excel.Range = Nothing Dim xlPageSetup As Excel.PageSetup = Nothing Try objExcel = New Excel.Application objWorkBooks = objExcel.Workbooks objWorkBooks.Open(_xslFile) objWorkBook = objExcel.ActiveWorkbook xlSheet = DirectCast(objWorkBook.Worksheets(1), Microsoft.Office.Interop.Excel.Worksheet) rs = cm.ExecuteReader() I = 3 Do While rs.Read Dim AA() As String = {"B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M"} Dim K As Integer For K = 0 To 11 IN_Range(xlSheet, AA(K) & I.ToString, rs(K).ToString) Next xlRange = xlSheet.Range("3:3") xlRange.Copy() A = A + Marshal.ReleaseComObject(xlRange) xlRange = xlSheet.Range(I.ToString & ":" & I.ToString) xlRange.PasteSpecial( _ Paste:=Microsoft.Office.Interop.Excel.XlPasteType.xlPasteFormats, _ Operation:=Microsoft.Office.Interop.Excel.XlPasteSpecialOperation.xlPasteSpecialOperationNone, _ SkipBlanks:=False, Transpose:=False) A = A + Marshal.ReleaseComObject(xlRange) xlRange = xlSheet.Range(I.ToString & ":" & I.ToString) xlRange = xlRange.EntireRow xlRange.AutoFit() A = A + Marshal.ReleaseComObject(xlRange) xlRange = xlSheet.Range(I.ToString & ":" & I.ToString) N = 5.5 While True If CType(xlRange.RowHeight, Double) < N Then Exit While Else N += 5.5 End If End While xlRange.RowHeight = N '高さを設定 A = A + Marshal.ReleaseComObject(xlRange) I += 1 'ループカウンタを積む Loop xlPageSetup = xlSheet.PageSetup xlPageSetup.PrintArea = "B2:M" & (I - 1).ToString A = A + Marshal.ReleaseComObject(xlPageSetup) S_filename = System.IO.Path.GetDirectoryName(_xslFile) & Format(Now(), "yyyy-MM-dd-HH-mm-ss") & ".xls" objWorkBook.SaveAs(S_filename) objWorkBooks.Close() A = A + Marshal.ReleaseComObject(objWorkBooks) objExcel.Quit() A = A + Marshal.ReleaseComObject(objExcel) Exit Sub Catch ex As Exception Finally End Try End Sub Private Sub IN_Range(ByRef wSheet As Microsoft.Office.Interop.Excel.Worksheet, _ ByVal iCell As String, _ ByVal Value As String) Dim rng As Excel.Range = wSheet.Range(iCell) rng.Value = Value Marshal.FinalReleaseComObject(rng) rng = Nothing End Sub End Class

専門家に質問してみよう