アプリ版:「スタンプのみでお礼する」機能のリリースについて

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()

どなたかご存知の方がいらっしゃいましたら教えて下さい。
よろしくお願いします。

A 回答 (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")
などと参照を取得しましょう
    • good
    • 0
この回答へのお礼

みなさんのおかげで出来ました。ありがとうございます。
返事が遅くなってすいません。
一応、ソースを下記に載せさせていただきます。

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

お礼日時:2008/07/23 18:50

> 下記で("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メソッドが何を返してくるのかを確認してみましょう
    • good
    • 0

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です。)
    • good
    • 0
この回答へのお礼

みなさんのおかげで出来ました。ありがとうございます。
返事が遅くなってすいません。
一応、ソースを下記に載せさせていただきます。

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

お礼日時:2008/07/23 18:51

ANo.1&2です。



redfox63さまへ
>といった具合に使い終わったら Marshal.ReleaseComObject を実行しましょう
とは、
http://support.microsoft.com/default.aspx?scid=k …
ここに関連すると言う事で宜しいでしょうか?
今回は私も大変勉強になりました。ありがとうございます。
    • good
    • 0

先に回答された方の回答で機能すると思います



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」を手入力して実行すると、やはり上記でエラーになります。
何度もすいませんが、原因がわかりましたら教えて下さい。
自分でも継続して調べてみます。よろしくお願いします。

補足日時:2008/07/18 10:36
    • good
    • 0

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」を手入力して実行すると、やはり上記でエラーになります。
何度もすいませんが、原因がわかりましたら教えて下さい。
自分でも継続して調べてみます。よろしくお願いします。

補足日時:2008/07/18 10:31
    • good
    • 0

>xlBook.Worksheets.Copy()


xlBook.Worksheets.Copy(Before:=xlBook.Worksheets(3))
例えばこんな感じでしょうか。
    • good
    • 0

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