質問
Excelファイルの操作
- 投稿日時:2007/08/28 00:05
COMコンポーネントを用いた以下2点のExcelファイルの操作方法が分からず困っています。
1.指定されたシートを同一Excelファイル内にコピー追加する方法。
2.指定されたシートのシート名を変更する方法。
以上よろしくお願いします。
回答 (2件)
- 最新から表示
- 回答順に表示
- ベストアンサーのみ表示
No.2ベストアンサー20pt
- 回答日時:2007/08/28 15:53
お世話になります。
VB.NET(.NET Framework 2.0 及び Excel 2003 で動作確認)
から操作したい場合です。
1) 参照設定の追加
ソリューションエクスプローラから
該当するプロジェクトを選択し、右クリックして「参照の追加」を選ぶ。
表示されたダイアログで、COM を選択して、
Microsoft Excel x.x Object Library
を選択して、OK を押下。
2) コーディング
Imports Microsoft.Office.Interop
Public Class Form1
' デザイナで Button を張りつけてある
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
' 必要な変数は Try の外で宣言する
Dim xlApplication As Excel.Application
Dim saveFileName As String = "D:\" & DateTime.Now.ToString("yyyyMMddHHmmss") & ".xls"
' COM オブジェクトの解放を保証するために Try ~ Finally を使用する
Try
xlApplication = New Excel.Application()
xlApplication.Visible = True
' 警告メッセージなどを表示しないようにする
xlApplication.DisplayAlerts = False
Dim xlBooks As Excel.Workbooks = xlApplication.Workbooks
Try
' 新規にファイルを開く場合
Dim xlBook As Excel.Workbook = xlBooks.Add()
' 既存ファイルを開く場合
'Dim xlBook As Excel.Workbook = xlBooks.Open(Filename:="xlsファイルのパス")
Try
Dim xlSheets As Excel.Sheets = xlBook.Worksheets
Try
Dim xlSheet As Excel.Worksheet = DirectCast(xlSheets(1), Excel.Worksheet)
'' 最初のシートの名前を変える
xlSheet.Name = "aaa"
'' 最初のシートをコピーする
xlSheet.Copy(After:=xlSheet)
Finally
If Not xlSheets Is Nothing Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheets)
End If
End Try
Finally
If Not xlBook Is Nothing Then
Try
xlBook.SaveAs(Filename:=saveFileName)
xlBook.Close()
Finally
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook)
End Try
End If
End Try
Finally
If Not xlBooks Is Nothing Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBooks)
End If
End Try
Finally
If Not xlApplication Is Nothing Then
Try
xlApplication.Quit()
Finally
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApplication)
End Try
End If
End Try
MessageBox.Show(saveFileName & "に保存しました")
End Sub
End Class
上記コードを実行し、Button をクリックすると
aaa というシートがコピーされて D:\yyyyMMddHHmmss.xls に
保存されるはずです。
COM を扱う場合の注意点についてはこちらをどうぞ。
http://jeanne.wankuma.com/tips/programing/releas …
VB6 から Excel を扱う場合はこちらを参考にして下さい。
http://naoko.wankuma.com/tips/tips_0001_vb6excel …
この回答へのお礼
環境を付け忘れましたが、VB2005を用いています。
また、MSDNをよく探すと詳しい情報が出ており自己解決致しました。
すぐに質問文を消したかったのですが、24時間経たないと消せないようなので放っておいた次第です。
ありがとうございました。
No.1ベストアンサー10pt
- 回答日時:2007/08/28 09:44
<第1ステップ>
エクセルで、マクロの記録モード(ツールーマリロー新しいマクロの記録)にして、質問の1.、2.の操作をしてください。
それでエクセルVBAのコードはどんなものになるか分かります。
操作は
(1)シートコピー
問題のコピー元のシートのシートタブ部で右クリック
「異動またはコピー」を選ぶ。
「コピーを作成する」にチェックを入れること
(2)シート名変更
問題のシートのシートタブ部で右クリック
「名前の変更」を選択。
シートタブ部で新の名前を入力
ーー
以上で記録されたコードを変数とかで相対化するのはできるでしょう。
>COMコンポーネントを用いた、とおっしゃっているレベルだから。
ーーー
<第2ステップ>
エクセルのアプリケーションオブジェクトをつかむ
Set xlApp = CreateObject("Excel.Application")
それを頭につけて、順次、ブック、シートのオブジェクトをつかむ。
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlBook.Worksheets(1)
そしてエクセルVBAのDefaltに頼ったコードの書き方でなく、
サブおオブジェクトには親(上位)オブジェクト名を必ず先頭にかぶせる。
そのようにマクロの記録のコードを改良してください。
参考
http://www.bcap.co.jp/hanafusa/VBHLP/excel1.htm
この回答へのお礼
環境を付け忘れましたが、VB2005を用いています。
また、MSDNをよく探すと詳しい情報が出ており自己解決致しました。
すぐに質問文を消したかったのですが、24時間経たないと消せないようなので放っておいた次第です。
ありがとうございました。
このQ&Aを見た人はこんなQ&Aも見ています
関連するQ&A
このカテゴリで人気のQ&Aランキング
- 4VBAにて新規ブックへ既存シート...
- 5エクセル(Excel) ワイルドカード *...
- 6TextBoxに半角数字のみの入力しかで...
- 7文字列を含まないという正規表現は?
- 8Functionの戻り値を配列にしたいの...
- 9VB上で実行中の無限ループの止め方
- 10VBAマクロでCSV出力
- 11VBAで別エクセルファイルから指定エ...
- 12Sub ***( ) と Private Sub ***( ) ...
- 13定数配列の書き方
- 14実行時エラー429
- 15データセットのレコード更新がしたい
- 16DoEvents関数って何?
- 17エクセルVBAでファイル・シート名を...
- 18CloseとDisposeの違い
- 19DataGridViewで、選択した行の値を...
- 20動的配列が存在(要素が有る)か否か...