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」を参照しています
No.2ベストアンサー
- 回答日時:
質問者の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を閉じて、上記フォルダを開き、上記エクセルブックを開いて確認のこと。
非常に参考になりました
ありがとうございました
ただご教授いただいた方法だとエクセルのプロセスが終了ができませんでした
解決するにはどうしたらよろしいでしょうか
No.3
- 回答日時:
すでに、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)
No.1
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) Accessフォームで全レコードを指定のExcelのセルへ転送し印刷する方法について 2 2022/09/08 18:23
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
エクセルのVBAの標準モジュール...
-
「Columns("A:C")」の列文字を...
-
実行時エラー 3265「要求された...
-
VBAからPDFファイルにパスワー...
-
エクセルマクロエラー「'Cells'...
-
テキストボックス中の文字列の...
-
VBAで作成するメール(開封確認...
-
EXCEL VBA オートシェイプナン...
-
VBAで Set wb = Sheets(1).Cop...
-
PowerPointVBAでスライドマスタ...
-
VBAについてです。 初心者です...
-
[C#]static void 関数内でthis
-
ローカル変数を戻り値に使うと...
-
VBA:オートシェイプの線の長...
-
[VBA]CDOメッセージ送信エラー
-
ある文字列が全て数字であるか...
-
【VB】【エクセル操作】 SaveAs...
-
UserForm1.Showでエラーになり...
-
AccessVBAで「dim dbs as datab...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
エクセルのVBAの標準モジュール...
-
実行時エラー 3265「要求された...
-
VBAで既に開いている別アプリケ...
-
PowerPointVBAでスライドマスタ...
-
VBAで Set wb = Sheets(1).Cop...
-
エクセルマクロエラー「'Cells'...
-
ある文字列が全て数字であるか...
-
VBAについてです。 初心者です...
-
VBScriptでファイルの日時順(降...
-
Excelでフィルタをかけると警告...
-
VBAからPDFファイルにパスワー...
-
VBで引数にDictionaryオブジェ...
-
このように書くべきですか? { ...
-
EXCEL VBA オートシェイプナン...
-
テキストボックス中の文字列の...
-
エクセルVBAでcode128のバー...
-
[VBA]CDOメッセージ送信エラー
-
オブジェクトが見つかりません
おすすめ情報