dポイントプレゼントキャンペーン実施中!

初心者なので、説明がつたないところ、用語の使い方が間違っいるところがあるかと思いますが、今後のためにバシバシ指導お願いします。m(_ _)m

VBにてEXCELシートを作成し、それを既存ファイルのシートに追加し、保存したいと考えています。
・既存ファイルがなけれが新規作成
・既存ファイルに同名のシートがあれば上書きするか、シ ート名を変更するか聞く


私が考えた流れは、
1.既存ファイルを開く
2.新しいシートを追加する
3.シートの名前をつける
4.既に同名シートがあれば上書きの有無を聞く
5.VBで作ったEXCELシートを既存ファイルのシートにコピー
6.既存ファイルを更新
7.EXCELを閉じる
です。

まず、既存シートはコモンダイアログで探し、追加したい既存シートを開くところまではできました。
ただ、 シートを追加しようとすると文字が赤くなって怒られました。
いろいろ調べた結果の文章なので、どうしてここで赤くなるのかが解読できません。

Dim objBook2 As Excel.Workbook
Dim objSheet2 As Excel.Worksheet


Set objBook2 = objExcel.Workbooks.Open(CDl.FileName)
objBook2 .Visible = True
Set objSheet2 = objBook2.Worksheets(1)
Sheets.Add(after:=Worksheets(Worksheets.Count))
↑ここでだめでした。

一気にコピーしたほうがいいのかとも思い、下記を記入しましがだめでした。
objSheet.Copy After:=CDl.FileName.Sheets(CDl.FileName.Sheets.Count)

長々とかきましたが、どなたかEXCELシートを追加する記述方法を教えてください。
よろしくお願いします。

A 回答 (3件)

これでできましたよ。

(ダメだったって行だけ)
Call objBook2.WorkSheets.Add(,objBook2.Worksheets(objBook2.Worksheets.Count))

ポイント:
1.MSDNあたりのサンプルをごらんになったんでしょうが、そのサンプルはVB.NETじゃなかったですか?いいところまで行ったんですが、あと一歩だったようです。
2.Addの引数に、いきなり","が入っているのがポイントです。"After:="は、「名前付き引数の"After"にはこれを突っ込め」です。C#のサンプルからAfterは第二引数に当ると推測されたので、最初に空のパラメータを渡しました。
3.No.1の方のご指摘どおり、Addの後に括弧をつけるなら、頭に"Call "が必要です。"Call "をつけたくないなら、括弧をつけてはいけません。

蛇足:Visible のところ、"."のまえにSpaceが居ますが、ホンモノ大丈夫ですよね。
    • good
    • 0
この回答へのお礼

詳しい解答ありがとうございますm(__)m
とても参考になりました。

同じシートの追加でもこんなに種類があるんですね。(初心者発言ですみません)

これで、Addの使い方がわかりました。

ご心配頂いた「 .Visible」のスペースは、転記の際に入ってしまったようです。
ご心配ありがとうございます。
ただ、このままだとNo.3の方のご指摘の通りうごきませんでしたが。。。

お礼日時:2005/04/25 09:21

もし直すなら、私なら、こんな風かな。


以下は、単独で開いている場合です。

Dim objExcel As Excel.Application '一応隠れている部分を出しました。
Dim objBook2 As Excel.Workbook
Dim objSheet2 As Excel.Worksheet
Set objExcel = New Excel.Application
Set objBook2 = objExcel.Workbooks.Open(CDl.FileName)
  objExcel.Visible = True  '←ここ
Set objSheet2 = objBook2.Worksheets(1)
  objBook2.Worksheets.Add after:=Worksheets(Worksheets.Count)

私は、その元のコードが良く分からないところがあります。
「objBook2.Visible = True」です。
 objBook2 は、Workbook ですが、このメンバに、.Visible はありましたか?
 それは、Application のメンバだから、objExcel.Visible になるのではないでしょうか?もちろん、Visibleにする必要性があれば、ということで、なくても、保存すれば、シートは追加できますけれど。
    • good
    • 1
この回答へのお礼

早速の解答にもかかわらず御礼が遅れてしまい失礼致しました。m(__)m

シート無事追加できました。

あと、Visible のところですが、シートが追加されてるのか確認したくて Visible = True としていました。
ただ、ご指摘の通りobjBook2 = True  では
「オブジェクトはプロパティとメソッドをサポートしていません」といわれました。

基本的なところが分かっていないようです。。。

たすかりました。ありがとうございました。

お礼日時:2005/04/25 09:10

Addメソッドを括弧でくくってしまっているのが原因だと思います。


Call Sheets.Add(after:=Worksheets(Worksheets.Count))

Sheets.Add after:=Worksheets(Worksheets.Count)
を試してみてください。
    • good
    • 0
この回答へのお礼

解答ありがとうございます。
そしてお礼が遅れ失礼致しました。

Addはかっこでくくってはいけないんですね。。。

括弧を外したらうまくいきました。

助かりました、ありがとうございましたm(__)m

お礼日時:2005/04/25 09:13

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

このQ&Aを見た人はこんなQ&Aも見ています