VB2005Expressで開発をしています。
Excelのシートをコピーして同じbookに追加をしたいと思っています。
下記でまず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)
xlApp.Visible = True
下記で追加できると思うのですが、()内にセットするパラメータが
わかりません・・・
xlBook.Worksheets.Copy()
どなたかご存知の方がいらっしゃいましたら教えて下さい。
よろしくお願いします。
No.7ベストアンサー
- 回答日時:
たぶんエラーになるのはVB.NETのプロジェクト設定で
Option StrictがOnになっているためでしょう
プロジェクト > 最下段のプロパティ > コンパイルタブの中段あたりの『Option Strict(s)』を確認してみましょう
シートにアクセスするには
1) xlAppのActiveSheetから取得する
2) ブックのWorksheetsプロパティからSheetsコレクションを取得してこのItemプロパティから取得する
のいずれかの方法がいいでしょう
任意のシートの場合 2)の方法になると思います
dim oSheets as Excel.Sheets
oSheets = xlBook.Worksheets
として
wsA = oSheets("a")
などと参照を取得しましょう
みなさんのおかげで出来ました。ありがとうございます。
返事が遅くなってすいません。
一応、ソースを下記に載せさせていただきます。
Dim xlApp As New Excel.Application
Dim xlBook As Excel.Workbook = xlApp.Workbooks.Open("C:\aaa.xls")
Dim xlSheets As Excel.Sheets = xlBook.Worksheets
Dim xlSheet As Excel.Worksheet = xlSheets.Item(1)
Do While intRecCnt > 0
xlSheet = xlSheets.Item(1) 'シートの選択
xlSheet.Copy(Before:=xlBook.Worksheets(1)) 'シートのコピー
xlSheet = xlSheets.Item(1) '再度シートを選択
xlSheet.Name = intRecCnt 'シートに名前を付ける
Loop
No.6
- 回答日時:
> 下記で("a")の後ろに「.」を入力しても「copy」が入力補助に表示
>されないのですが・・・。Excelのバージョン等が関係しているので
>しょうか。
> xlwb.Worksheets("a").copy(Before:=xlwb.Worksheets(3))
表示されないでしょうね
なぜかといえば Worksheet("a")がObject型を返すためです
Objet型に Copyメソッドってありませんから …
このままの構文でやるとするなら CTypeで適切な型変換が必要です
xlwb.Worksheets("a")部分を
CType(xlwb.Worksheets("a"),Excel.Worksheet)
といった具合に型変換してやれば『.』でCopyメソッドもインテリセンスに表示されますよ
この場合COMオブジェクトの開放ができなくなってしまう参照があるのでお勧めしませんが …
xlwb.Worksheets(" と入力した際にパラメータヒントに何型で返されるかといったことが表示されます
またオブジェクトブラウザでWorksheetsコレクションクラスのItemメソッドが何を返してくるのかを確認してみましょう
No.5
- 回答日時:
ANo.1&2+5です
> xlwb.Worksheets("a").copy(Before:=xlwb.Worksheets(3))
>「copy」を手入力して実行すると、やはり上記でエラーになります。
上記ってそのまま使用されたわけではないですよね?
上記コードは私の環境でのテストですから、madamadahiyokoさんの環境に
合わせて下さいね。
"a"はコピーしたいシート名で、コピー先は同じBookの3枚目のワークシートの前
になります。(ここはExcelVBAのヘルプを参照されては)
>下記で("a")の後ろに「.」を入力しても「copy」が入力補助に表示
>されないのですが・・・。Excelのバージョン等が関係しているので
>しょうか。
私も候補には出てきませんでした。(手で打ち込みました)
ANo.3さんの方法ならCOPYが出てきましたよ。
(Excel2002です。)
みなさんのおかげで出来ました。ありがとうございます。
返事が遅くなってすいません。
一応、ソースを下記に載せさせていただきます。
Dim xlApp As New Excel.Application
Dim xlBook As Excel.Workbook = xlApp.Workbooks.Open("C:\aaa.xls")
Dim xlSheets As Excel.Sheets = xlBook.Worksheets
Dim xlSheet As Excel.Worksheet = xlSheets.Item(1)
Do While intRecCnt > 0
xlSheet = xlSheets.Item(1) 'シートの選択
xlSheet.Copy(Before:=xlBook.Worksheets(1)) 'シートのコピー
xlSheet = xlSheets.Item(1) '再度シートを選択
xlSheet.Name = intRecCnt 'シートに名前を付ける
Loop
No.4
- 回答日時:
ANo.1&2です。
redfox63さまへ
>といった具合に使い終わったら Marshal.ReleaseComObject を実行しましょう
とは、
http://support.microsoft.com/default.aspx?scid=k …
ここに関連すると言う事で宜しいでしょうか?
今回は私も大変勉強になりました。ありがとうございます。
No.3
- 回答日時:
先に回答された方の回答で機能すると思います
VB.NETでCOMを扱う場合マーシャリングに気を使わないといけません
暗黙的に参照されるオブジェクトの開放を怠るとアプリケーションが裏で動いた状態になってしまう恐れがあります
今回の場合ですと
xlwb.Worksheets("a").copy(Before:=xlwb.Worksheets(3))
のxlwb.Worksheets("a") や xlwb.Worksheets(3) などがそれにあたります
xlwb.Worksheets("a")やxlwb.Worksheets(3)をWorksheet型の変数を用意してこちらに代入してから Copyメソッド実行しましょう
dim wsA, ws3 as Excel.Worksheet
wsA = xlwb.Worksheets("a")
ws3 = xlwb.Worksheets(3)
wsA.Copy( Before:= ws3 )
Marshal.ReleaseComObject( wsA )
Marshal.ReleaseComObject( ws3 )
wsA = Nothing
ws3 = Nothing
といった具合に使い終わったら Marshal.ReleaseComObject を実行しましょう
CellsやRangeで参照するRangeオブジェクトなどにも気をつけましょう
この回答への補足
丁寧に回答していただきありがとうございます。
A No.1さんに教えていただいた通りにコーディングしました。
Dim xlApp As New Excel.Application
Dim xlwb As Excel.Workbook = xlApp.Workbooks.Open("R:\aaa.xls")
Dim xlsheet As Excel.Worksheet
下記で("a")の後ろに「.」を入力しても「copy」が入力補助に表示
されないのですが・・・。Excelのバージョン等が関係しているので
しょうか。
xlwb.Worksheets("a").copy(Before:=xlwb.Worksheets(3))
「copy」を手入力して実行すると、やはり上記でエラーになります。
何度もすいませんが、原因がわかりましたら教えて下さい。
自分でも継続して調べてみます。よろしくお願いします。
No.2
- 回答日時:
ANo.1です。
一応自分で試したのは、
Dim xlApp As New Excel.Application
Dim xlwb As Excel.Workbook = xlApp.Workbooks.Open("R:\aaa.xls")
Dim xlsheet As Excel.Worksheet
xlwb.Worksheets("a").copy(Before:=xlwb.Worksheets(3))
こんな感じでした。
ご参考になれば。
この回答への補足
丁寧に回答していただきありがとうございます。
教えていただいた通りにコーディングしました。
Dim xlApp As New Excel.Application
Dim xlwb As Excel.Workbook = xlApp.Workbooks.Open("R:\aaa.xls")
Dim xlsheet As Excel.Worksheet
下記で("a")の後ろに「.」を入力しても「copy」が入力補助に表示
されないのですが・・・。Excelのバージョン等が関係しているので
しょうか。
xlwb.Worksheets("a").copy(Before:=xlwb.Worksheets(3))
「copy」を手入力して実行すると、やはり上記でエラーになります。
何度もすいませんが、原因がわかりましたら教えて下さい。
自分でも継続して調べてみます。よろしくお願いします。
No.1
- 回答日時:
>xlBook.Worksheets.Copy()
xlBook.Worksheets.Copy(Before:=xlBook.Worksheets(3))
例えばこんな感じでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) Excel VBA メール作成について 本文の中にExcel でコピーした図を上下に2つ 貼り付けを 2 2023/06/14 01:48
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Visual Basic(VBA) Excel VBAについて、 フォルダ内のファイルを全て開きたい場合、 FSOを使えば、Dirは使わ 1 2023/01/27 13:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JTableで値を右寄せ表示する方法
-
[ASP.NET]DropDownListのDB連携...
-
VB.NETでのnothing の意義について
-
JSPでのArrayListの表示につい...
-
VBAでの[]
-
GridViewに行追加するには?
-
エクセルVBA 画像を貼り付ける...
-
servletからjspへオブジェクト...
-
String型からlong型への変換は...
-
サーブレットコンテキストの意...
-
javaで配列の中身を表示する方法
-
オブジェクトの参照渡しについて
-
★Java1.5 オブジェクトのソー...
-
引数のないhasOwnProperty
-
エクセルVBA/SpecialCellsで特...
-
javaで、オブジェクトを生成し...
-
ピクチャーボックスに点を打つ...
-
vectorの内容をString型に変換...
-
VB.netでメソッドからコントロ...
-
エクセルVBAで、条件に一致する...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでの[]
-
エクセルVBA 画像を貼り付ける...
-
サーブレットコンテキストの意...
-
C#のクラスで値渡しをする
-
Vba ListViewの行挿入に関して...
-
Excel VBA 定数にオブジェクト...
-
VB.netでメソッドからコントロ...
-
servletからjspへオブジェクト...
-
javaで、、、
-
VB.NETでのnothing の意義について
-
Dispose()は、どんな時に使うの...
-
ピクチャーボックスに点を打つ...
-
VBスクリプトでテキストファイ...
-
String型からlong型への変換は...
-
JSPでのArrayListの表示につい...
-
C#で親にイベントを投げる方法
-
MessageBox.Show(Me,…の「Me」...
-
エクセルVBA/SpecialCellsで特...
-
getParameter()について
-
VBS でのソート処理Excel2003
おすすめ情報