• ベストアンサー

VB6.0でEXCELにシートを追加したい

初心者なので、説明がつたないところ、用語の使い方が間違っいるところがあるかと思いますが、今後のためにバシバシ指導お願いします。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シートを追加する記述方法を教えてください。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

これでできましたよ。(ダメだったって行だけ) 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が居ますが、ホンモノ大丈夫ですよね。

achi1111
質問者

お礼

詳しい解答ありがとうございますm(__)m とても参考になりました。 同じシートの追加でもこんなに種類があるんですね。(初心者発言ですみません) これで、Addの使い方がわかりました。 ご心配頂いた「 .Visible」のスペースは、転記の際に入ってしまったようです。 ご心配ありがとうございます。 ただ、このままだとNo.3の方のご指摘の通りうごきませんでしたが。。。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

もし直すなら、私なら、こんな風かな。 以下は、単独で開いている場合です。 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にする必要性があれば、ということで、なくても、保存すれば、シートは追加できますけれど。

achi1111
質問者

お礼

早速の解答にもかかわらず御礼が遅れてしまい失礼致しました。m(__)m シート無事追加できました。 あと、Visible のところですが、シートが追加されてるのか確認したくて Visible = True としていました。 ただ、ご指摘の通りobjBook2 = True  では 「オブジェクトはプロパティとメソッドをサポートしていません」といわれました。 基本的なところが分かっていないようです。。。 たすかりました。ありがとうございました。

  • SSBBGLUV
  • ベストアンサー率47% (11/23)
回答No.1

Addメソッドを括弧でくくってしまっているのが原因だと思います。 Call Sheets.Add(after:=Worksheets(Worksheets.Count)) か Sheets.Add after:=Worksheets(Worksheets.Count) を試してみてください。

achi1111
質問者

お礼

解答ありがとうございます。 そしてお礼が遅れ失礼致しました。 Addはかっこでくくってはいけないんですね。。。 括弧を外したらうまくいきました。 助かりました、ありがとうございましたm(__)m

関連するQ&A

  • VBでEXCELのシートのコピーに関して

    同一Book内で、シートのコピーをしようと考えて、幾つかのHPを参考に、以下のような 記述をしました。 その際に、以下の記述をした場合、本来はコピー先のシート名を変更したいにも関わらず、コピー 元のシート名が変わってしまいます。 追加したシートの名前を変更させるには、どのような書き方にすれば良いでしょうか? 自分で記述しておきながら、どのように対応したら良いかわからず。。。 また、以下のような記述をした場合、追加したセル側のシートを操作したいにも関わらず、 コピー元のシートを書き換えてしまいます。 追加したシートのセルを操作したい(値を入力)ような場合は、どのような記述を すれば良いでしょうか。。。 ご教授頂ければと思います。 '既存のEXCELファイルを開く Dim xlFilePath As String = "C:\test.xls" '起動時の処理 Dim xlApp As New Excel.Application Dim xlBooks As Excel.Workbooks = xlApp.Workbooks Dim xlBook As Excel.Workbook = xlBooks.Open(xlFilePath) '確認のためExcelのウィンドウを表示する xlApp.Visible = True Dim xlSheets As Excel.Sheets = xlBook.Worksheets Dim xlSheet As Excel.Worksheet = CType(xlSheets.Item(1), Excel.Worksheet) Dim xlSheet2 As Excel.Worksheet = xlBook.Worksheets(1) 'シートのコピー xlSheet.Copy(After:=xlSheet2) 'シートに名前を付ける xlSheet.Name = "TEST" Dim xlRange As Excel.Range 'データの入力セル範囲 xlRange = xlSheet.Range("A1:A1") 'セルへデータの入力 xlRange.Value = “AABBCC”

  • Excel VBAシートの同一番地のセルのリスト化

    別々のシートの同一番地のセルの値をリスト化するのにこのようなVBAを見つけました。 シートは追加せず、既存のシートを指定したくて、色々と書き換えをチャレンジしましたがうまくいきません。 既存のシートを指定し、この作業を行うにはどうしたらよいのでしょうか? ご教示いただけますと幸甚です。 Sub Test1() Dim TmpSheet As Worksheet, i As Integer i = Worksheets.Count Set TmpSheet = Worksheets.Add(After:=Sheets(Sheets.Count)) With TmpSheet For i = 1 To i .Cells(i, 1).Value = Worksheets(i).Name .Cells(i, 2).Value = Worksheets(i).Range("E5").Value Next End With End Sub

  • C#でエクセルのシートを追加し末尾に移動したい

    C#でエクセルのシートを追加し、末尾に移動したいのですが Sheet1/Sheet2/Sheet3/Sheet4/ の順にならず Sheet1/Sheet2/Sheet4/Sheet3/ になってしまいます、どこが間違っているのでしょうか? すみませんが教えていただけないでしょうか? Excel.Application ExcelApp = new Excel.Application(); ExcelApp.Visible = false; Workbook wb = ExcelApp.Workbooks.Add(); Worksheet ws = wb.Worksheets.Add(); ws.Select(Type.Missing); ws.Cells[1, 1] = "aaa"; //末尾に移動する int totalSheets = wb.Sheets.Count; ws.Move(wb.Worksheets[totalSheets]); //saveダイアログを表示する SaveFileDialog sfd = new SaveFileDialog(); sfd.FileName = ""; sfd.Filter = "EXCELファイル(;*.xlsx)|*.xlsx|すべてのファイル(*.*)|*.*"; sfd.FilterIndex = 1; sfd.Title = "保存先のファイルを選択してください"; sfd.RestoreDirectory = true; //OKなら保存する if (sfd.ShowDialog() == DialogResult.OK) { Console.WriteLine(sfd.FileName); wb.SaveAs(sfd.FileName); } //エクセルを閉じる sfd.Dispose(); wb.Close(Type.Missing, Type.Missing, Type.Missing); ExcelApp.Quit();

  • VB6からExcel出力し、ブックを閉じたとき異常終了

    Win98 FirstEdition VB6 SP3 Excel97 SR1 上記の環境において、下記のソースのように、VBからExcelを起動してデータを出力した際、Excelのブックを閉じると、「保存しますか?」の「はい」「いいえ」関わらず、あるいはブックをセーブした後閉じても、Excelが異常終了してしまいます。 ブックではなく、Excel自体を閉じた場合は全く問題ありません。 どなたか対処法をご存じな方いらっしゃいませんか? Dim objXls As Object Dim objBook As Object Dim objSheet As Object Set objXls = CreateObject("Excel.Application") objXls.Workbooks.Add objXls.Visible = False Set objBook = objXls.ActiveWorkbook Set objSheet = objBook.Worksheets(1) (中略) objXls.Visible = True

  • vbs 文字位置を中央に

    vbscriptでエクセルファイルへ出力するスクリプトを作成しています。 エクセルファイルのセルに文字列を入力し、文字を中央揃えにしたいのですが、うまくいきません。 ----------------------------------------- Dim FSO, objExcel, objBook, objSheet Set FSO = CreateObject("Scripting.FileSystemObject") Set objExcel = CreateObject("Excel.Application") objExcel.Visible = True Set objBook = objExcel.Workbooks.Add Set objSheet = objExcel.Worksheets("Sheet1") objSheet.range("a1") = "test" objSheet.range("a1").HorizontalAlignment = xlHAlignCenter Set FSO = Nothing : objExcel = Nothing : Set objBook = Nothing : Set objSheet = Nothing ----------------------------------------- どうすれば、中央揃えにできますでしょうか? よろしくおねがいします。

  • 【VB6】EXCELのシート名を変更したい

    お世話になっております。 VB6(visual basic 6)プログラムからEXCELのシート名を指定したいです。 EXCEL:EXCEL 2000 OS: win XP 以下の記述ではシート名がデフォルトのままです。 (sheet1のままで変更できていない) Dim fs As Object Dim oApp As Object Set oApp = CreateObject("Excel.Application")'EXCEL起動 oApp.Visible = True oApp.UserControl = True oApp.Workbooks.Add '新規のワークシートsheet1を追加する oApp.Cells(1, 1) = "シート名を指定したい!" 'セル入力はできた oApp.Sheets("sheet").select oApp.Sheets("sheet").Name = "新シート名" ご覧のように (1)自動EXCEL起動して (2)セル1,1に文字入力して (3)シート名を指定 しようとしております。 セル(1,1)に「シート名を指定したい!」は入力されております。 ブック名(ファイル名)はデフォルトのBook1.xlsです。 シート名の指定方法が間違っているからうまくいかないと思っております。 どうぞよろしくお願いいたします。

  • VB2005でExcelのシートをコピー

    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() どなたかご存知の方がいらっしゃいましたら教えて下さい。 よろしくお願いします。

  • エクセルでグラフ追加について教えてください。

    すみませんが、教えてください。 VBAで、エクセルワークブックのシートの最後にグラフを追加しようとしています。 Charts.Add after:=Sheets(Sheets.Count) このコードだとグラフが、最終シートの後ろではなく、前に追加されてしまいます。 どうすれば、シートの後ろに挿入することができるのでしょうか?

  • エクセルVBAでシート追加

    初めて質問します。 VBAで新しいシートを追加する時 同名のシート等があるとエラーになります。 追加するときシート名をチェックしたいのですが どの様にすれば良いでしょうか? また、シートは一番最後に追加したいです。 よろしくお願いします。 Sub Macro1() x = InputBox("シート名") Worksheets.Add.Name = x End Sub

  • VBA シート名重複した場合削除する

    教えてください。 VBAに関しての質問です。 全くの知識がないので教えていただきたいです。 エクセルワークシートに以下の機能を追加している状態です。 For Each ws In Worksheets If ws.Name = "データ" Then wsChkflg = True End If Next If wsChkflg = True Then ThisWorkbook.Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = "データ" Else ThisWorkbook.Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = "データ" End If Set wsNew = ThisWorkbook.Worksheets("データ") 「データ」というシートが作成、追加されるのですが、同じシート名で新規作成した時に エラーが出てしまいます。そのエラーを出さないようにすため、ダイアログ等も出さずに既存のシートを強制的に削除する機能を追加したいのです。 VBAの知識がなくて困っています。 何か良い方法がわかる方いらっしゃいましたらお力を貸してください。 よろしくお願いいたします。

専門家に質問してみよう