プロが教える店舗&オフィスのセキュリティ対策術

VB2008 エクセル出力

教えていただけると助かります

VB6.0使用時にエクセル出力をするために下記のようなプログラムで出力していました
※「Microsoft Excel 9.0 Object Library」を参照

Dim xlApp As EXCEL.Application
Dim xlBook As EXCEL.Workbook
Dim xlsheet As EXCEL.Worksheet
Dim File As String

File = App.Path + "\EXCEL\" + "フォーム.xls"
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open(File)
Set xlsheet = xlBook.Worksheets("テスト")

xlsheet.Range("A1") = "テスト"

'フォルダ作成
If Dir("D:\", vbDirectory) = "" Then Call Mkdirs("D:\テスト")

'Worksheetを名前をつけて保存します。
xlApp.DisplayAlerts = False
xlsheet.SaveAs "D:\テスト\テスト.xls"

xlApp.Quit
Set xlApp = Nothing
Set xlBook = Nothing
Set xlsheet = Nothing


VB2008の場合だとどのように書けば同じように動きますか
※色々試してみましたがダメでした
「Microsoft Excel 12.0 Object Library」を参照しています

A 回答 (3件)

質問者のVB.NETの習熟度はどれほどか判りませんが、質問のVB6のコードがWEBをコピーしたものなら、VBAと違い、VB.NETは、スクールででも、VB。

NETの基礎を学ばないと難しいのではないですか。
 私もそんな程度で、WEBのコードを継ぎはぎしてやってみました。
VB.NETでも、プロジェクトー参照の追加で、エクセルバージョンに応じたCOMの参照設定が必要です。
フォルダはデスクトップに作る例です。
 Public Class Form1
Inherits System.Windows.Forms.Form
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'起動時の処理
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)
xlApp.Visible = True 'Excelを表示
'------
Dim xlRange As Excel.Range
Dim strDat(2, 0) As Object
xlRange = xlSheet.Range("A5:A7") 'データの入力セル範囲
strDat(0, 0) = "10" 'データの作成 A5
strDat(1, 0) = "20"          'データの作成 A6
xlRange.Value = strDat 'セルへデータの入力
    '---
xlSheet.Cells(10, 1).Value = "tokyo99" 'こちらの書き方も出来る
    xlSheet.Cells(10, 1) = "=A5+A6"
'-------
System.IO.Directory.CreateDirectory("C:\Documents and Settings\xxxx\デスクトップ\smp")
xlBook.SaveAs("C:\Documents and Settings\xxxx\デスクトップ\smp\sample1.xls")
xlBook.Close()
xlApp.Quit()
' COM オブジェクトの解放
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook)

' Excel のプロセス終了 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp)

End Sub
End Class
上記例でsmpフォルダが既にあって、警告などなく、そのまま進む。
sample1.xlsがそのフォルダに既にあると、警告が出る。
Form1を閉じて、上記フォルダを開き、上記エクセルブックを開いて確認のこと。
    • good
    • 0
この回答へのお礼

非常に参考になりました
ありがとうございました

ただご教授いただいた方法だとエクセルのプロセスが終了ができませんでした
解決するにはどうしたらよろしいでしょうか

お礼日時:2010/10/22 11:43

すでに、imogasi さんが回答されておられますが、投稿されたコードは、下記サイトのコードを


十分理解せず、引用されておられるようなのでそのまま使用すると、プロセスが残ってしまう等の
不具合が発生します。

VB6.0 と違い VB2008 系で使用する場合は、COM オブジェクトの解放処理が必要になります。
従って、Range オブジェクト等の COM オブジェクトを使用する場合、一度変数に受けて使用し
使用後は、解放処理(デクリメント)が必要になります。
この処理は、使用するExcel の全てのCOM オブジェクトに対して必要になります。


VB2008 系でExcel を操作する場合は、十分上記を理解した上でご使用下さい。

この回答への補足

ご回答いただきありがとうございました
おっしゃるとおりエクセルのプロセスが残ってしまうという不具合が発生してしまいしました
教えていただいたサイトを見たのですがVB初心者の自分には難しく…
どのように作ればプロセスを終了できるでしょうか
以下に自分が作ったものを参考までに載せておきます
よろしくお願いします


Dim xlApp As New Excel.Application
Dim xlBooks As Excel.Workbooks = xlApp.Workbooks

Dim File As String = Application.StartupPath + "\EXCEL\" + "テスト.xlsx"

Dim xlBook As Excel.Workbook = xlBooks.Open(File)
Dim xlSheets As Excel.Sheets = xlBook.Worksheets
Dim xlSheet As Excel.Worksheet = xlSheets.Item("テストレイアウト")

xlSheet.Range("A14").Value = "テスト"

System.IO.Directory.CreateDirectory("C:\VB\smp")
xlApp.DisplayAlerts = False
xlBook.SaveAs("C:\VB\smp\テスト.xlsx")
xlBook.Close()
xlApp.Quit()

System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook)
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp)

補足日時:2010/10/22 13:02
    • good
    • 0

このあたりをご参考に。



Excelファイルにアクセスするには?[C#、VB]
http://www.atmarkit.co.jp/fdotnet/dotnettips/717 …
    • good
    • 0
この回答へのお礼

お返事が遅れてしまいすいません
ご回答ありがとうございました
参考にさせていただきます

お礼日時:2010/10/22 11:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!