- ベストアンサー
Excelファイルの操作
COMコンポーネントを用いた以下2点のExcelファイルの操作方法が分からず困っています。 1.指定されたシートを同一Excelファイル内にコピー追加する方法。 2.指定されたシートのシート名を変更する方法。 以上よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
お世話になります。 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/releasecom.html VB6 から Excel を扱う場合はこちらを参考にして下さい。 http://naoko.wankuma.com/tips/tips_0001_vb6excel.html
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
<第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時間経たないと消せないようなので放っておいた次第です。 ありがとうございました。
お礼
環境を付け忘れましたが、VB2005を用いています。 また、MSDNをよく探すと詳しい情報が出ており自己解決致しました。 すぐに質問文を消したかったのですが、24時間経たないと消せないようなので放っておいた次第です。 ありがとうございました。