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

このQ&Aに関連する最新のQ&A

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に関連する人気のQ&A

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

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qシートベルトの固定解除

チャイルドシートを取りはずそうとして,(シートベルトの固定機能が作動しているときに)誤って,チャイルドシートの固定する金具の軸に引っかけてしまい,そのためチャイルドシートが取り外せなくなってしまいました。つまり引っ張っても,固定されてしまってシートベルトが伸びずにはずせなくなってしまったのです。
一度,シートベルトを巻き戻すほかに,シートベルトの固定を解除する方法はないのでしょうか。
車屋さんに頼むしかないのでしょうか。

Aベストアンサー

最近の車のリアシートの、最後までシートベルトを引き出すとカチカチカチカチと引き込まれるタイプですね?

探してもないかとは思いますが、お車によってはどこかをどうにかするとシートベルトが、チャイルドシート固定機構が外れる構造になっているかもしれません。その場合は、お車の取扱説明書に書かれている場合もあると思いますので、まずは探してみて下さい。(外車や高級車ですと、電気的に、裏コマンドで、例えば“どこかのスイッチを何回繰り返し押すとチャイルドシート固定機構が外れる。”なんてことになっているかもしれませんので、)無理に何かをやってみる前に、その辺(取扱説明書や、ディーラーに電話 問い合わせ)をまずよく確かめてみて下さい。

次に、“知恵の輪”的にやってみるしかないです。まず、反対側のシートベルトで、どこまで引き込めばチャイルドシート固定機構がフリーになるのかを確認し、その長さまで何とか引き込めないかを、知恵の輪の様にやってみるのです。これでしばらくやってみても無理でしたら、もう無理です。


次に、どこかを外し始めることになりますが、セダンですと、取扱説明書に、リアシートの外し方が載っている場合が多いです。これは、最近のリアシートは、シートカバーを付けたり外したりしやすいように、工具なしで簡単にリアシートが外れる場合が多いのです。リアシートが外れれば、その分すき間ができますので、その分引き込めてチャイルドシート固定機構がフリーになるかもしれません。
これも、シートを外す前に、反対側ベルトで長さを確認してから作業を始めたほうが良いですね。


フロントシートベルトに付いているアンカー(肩の上にある、肩ベルトの高さを調節する部分。)のようなものがリアシートベルトにも付いておりましたら、最後の手段があります。

(上記が全てが不可でしたら、)“最後の手段”、シートベルトの一番上のアンカーのところのボルトだけを外します。自転車の車輪が外せる程度のDIYが出来るかたがおられましたら、可能な作業ではありますが、100%の自信がある場合以外は、専門家に頼んで下さい。
ラチェットハンドル(http://www.koken-tool.co.jp/img/products/tec/ratchet/3753n.jpg)と ソケットレンチ(http://www.koken-tool.co.jp/catalog/img/main/h4/4400m.jpg)といった工具を必ず使って下さい。

決してこんな モンキレンチ(http://www.kyototool.co.jp/products/catalog/nepros/nwm.jpg)や スパナ(http://www.kyototool.co.jp/products/catalog/nepros/ns2.jpg)は使ってはいけません。

どこのボルトを緩めるかといいますと、リアシートベルトを支えてる、一番上の部分てありますよね?座った時に肩より上に来る部分です(アンカーといいます。)。これは、ボルト1本で取り付けられているのですが、きっとプラスチックの めくらぶた が付いていると思いますが、まずこれを外し、 ボルトを緩める前に、油性マジックインキなどでボルトの頭の一番上に印を付けておくと、あとで締め付けるときの目安になります。
その後、ソケットレンチにて、反時計回りにじわっと緩めます。この時注意して頂きたいのは、緩んだ瞬間に工具がリアガラスに当たって割れないように充分に気を付けて下さい。

ボルトが緩みさえすれば後は簡単です。手でボルトをクルクル緩め、完全に外れる前に、アンカー内にあるスペーサーやワッシャーをなどを なくさないように気を付けて、付いてる順番などを覚えながら外して下さい。

これでかなりの量のベルトが引き込めるようにはなるのですが、これを外したところで、必ずチャイルドシート固定機構が外れるかどうかは分からないというのが実際です。なぜなら、お車が、どの程度ベルトが引き込まれれば固定機構が外れるかや、チャイルドシートがどの程度ベルトを消費(巻き付き)しているかによって、変わってくるのです。

(リアシートの方は、アンカーが内装トリムの中に隠れているタイプの車もあり、その場合は、トリムを外すといったことは、出来そうな気がしても、お勧めできません。  トリムはなれない人が外すと割れてしまったりします。)


リアシート座面を外して、腰より下の部分のシートベルト(左シートなら腰の左側)の取り付け部を外す方法もありますが、ここまでやる場合は、よほど自信がある場合だけにして下さい。
(車をいじくるのが好きでいつもやっているかたですと簡単な作業ですが、そうでない場合は、工具を使う作業については専門家に頼んで下さい。)

最近の車のリアシートの、最後までシートベルトを引き出すとカチカチカチカチと引き込まれるタイプですね?

探してもないかとは思いますが、お車によってはどこかをどうにかするとシートベルトが、チャイルドシート固定機構が外れる構造になっているかもしれません。その場合は、お車の取扱説明書に書かれている場合もあると思いますので、まずは探してみて下さい。(外車や高級車ですと、電気的に、裏コマンドで、例えば“どこかのスイッチを何回繰り返し押すとチャイルドシート固定機構が外れる。”なんてこと...続きを読む

QWorkSheets.Add 任意の名前のシートがないときだけ

"test"という名前のワークシートがあるときは追加しないで、
ないときだけシートを追加したいんですが、そんな方法ありますか?

Aベストアンサー

シートがあるか調べる関数を作ってみました。
Public Function SheetExists(name As String) As Boolean
Dim x As Worksheet
SheetExists = False
For Each x In Sheets
If StrComp(x.name, name, vbTextCompare) = 0 Then SheetExists = True: Exit Function
Next
End Function
使い方
If Not SheetExists("test") Then
Sheets.Add(after:=Sheets(Sheets.Count)).name = "test"
End If

Qチャイルドシートの固定金具

チャイルドシートを固定するときに使う、固定金具(ロッキングクリップ)はどこで売っているのでしょうか。
ご存知でしたら教えてください。よろしくお願いします。

Aベストアンサー

お近くのオートバックス、イエローハット、ジェームスなどで売ってます。
シートベルトだけでなく、補助ベルトも使ってつけるとしっかり固定できます。

QVB.NETで既存Excel worksheetを操作する方法

VB.net、office XPのexcelを使用しています。

既存のexcelのworkbookのworksheetの特定のセルに、
値を代入してsaveする方法について、
ご存知の方、教えてください。

新規のworkbookのsheet1になら、値を入れることは
できるのですが、既存workbookのworksheetに
する方法がわかりません。

よろしくお願いいたします。

Aベストアンサー

ん~、
System.GC.Collect()
がうまく機能していないんでしょうかねぇ。
ちなみに、当方はWinXP + Excel2000の環境ですが、上記の1行を実行すれば、正常にExcelプロセスが開放されます。

……あ、そっか、
他のbookHogeとかshtHogeとかの変数も、Nothingしてやってください。

**********
  '保存して閉じる
  bookHoge.save()
  bookHoge.close()
  shtHoge = Nothing
  bookHoge = Nothing
  xlApp.quit()
  xlApp = Nothing
**********

ココに書き込むときにソースコードを修正したんですが、そのときに抜けちゃったんでしょうかねぇ。

Qシート下にサブウーハー固定

シートの下にサブウーハーを設置したいのですが、何か良い固定方法はあるでしょうか?

Aベストアンサー

軽量化でマットをはずしたりしていないのであれば、
マジックテープの硬いほうをマットに触れる面に両面テープで
付けると、車のマットがマジックテープのやわらかいほうの役割を
するので、固定しやすいです。

QMicroSoft BasicのDim文とVisualBasicのDim文の違い

私が20年前にMicroSoft Basicを使っていたときは、DIM文はDIMENSIONの略で配列型変数の宣言に使っていました。

最近VisualBasicの勉強を始めたのですが、変数の宣言はすべてDim文になっており、昔のMS BasicのDim文と意味合いが変わっているのに驚いています。

ここで質問させてください。
・なぜ配列を意味するDimension文が変数の宣言なのか?
・どのバージョンのBasicからDim文の意味が変わったのか?

私が使用していたのはNEC N-Basic,N-88Basic,N-98Basicです。

Aベストアンサー

VISUAL BASIC のDimは ディメンジョンの略です。
私の経験ではVB2.0時代からありました。

配列0を考えた場合変数とおなじであるからだとおもいます

Qお腹で固定するチャイルドシートについて

 12月に第二子が誕生する予定です。第一子は,ベビーシートとチャイルドシートが兼用になっているもの(寝かせられるタイプ)を使っていました。
 第二子の誕生に合わせて,当然もう一つ購入を考えていますが,兼用のものは高いので,下の子はお下がりを使ってもらって,上の子に新しいものを買おうと思っています。
 いまのところ,プリムキッズのようなお腹の部分で固定するタイプを考えています。ただ,肩からベルトで股まで固定するタイプに比べて,お腹のみの固定の方が,事故のときに力を受け止める場所が少ないので,体に負担がかかるのではないかと心配しています。
 国土交通省の実験サイトでは,「良」となっているので大丈夫なのでしょうが,みなさんはどう思われますか?
 また,みなさんは第二子誕生のときはどのように対応されていましたか。よろしくお願いします。

Aベストアンサー

お子さんはおいくつでしょうか?
うちの子は今3歳で、今使ってるチャイルドシート↓
http://www.coscojuvenile.com/product.asp?productID=38のベルトが目イッパイになってきた
(股下カッチンの為)事、最近お友達を乗せてあげることが増えた事等の理由からいずれ使うであろう
(最近使ってますが)ジュニアシートを購入しました。
いわゆる一般的な座台だけのジュニアシートは子供の体に直接シートベルトを装着するので、
・シートベルトが体を圧迫しないか?
・3歳の座高では微妙にシートベルトが首をかすめるのではないか?
・寝てしまった時に・・不安。
と言う不安材料があったのと、寝た時に前の台を抱えて枕代わりにしたりしてたので、前の台は必要だと
思いました。なので今まで使ってたのと同じ形(前台付)のジュニアシートにしました。
考えてらっしゃるプリムキッズも同じような前台付ですよね?

参考までに、うちの購入したジュニアシートです。↓

参考URL:http://www.coscojuvenile.com/product.asp?productID=34

お子さんはおいくつでしょうか?
うちの子は今3歳で、今使ってるチャイルドシート↓
http://www.coscojuvenile.com/product.asp?productID=38のベルトが目イッパイになってきた
(股下カッチンの為)事、最近お友達を乗せてあげることが増えた事等の理由からいずれ使うであろう
(最近使ってますが)ジュニアシートを購入しました。
いわゆる一般的な座台だけのジュニアシートは子供の体に直接シートベルトを装着するので、
・シートベルトが体を圧迫しないか?
・3歳の座高では微妙にシートベルトが首を...続きを読む

Qなぜ「Workbook」ではなく「Workbook

なぜ「Workbook」ではなく「Workbooks」なのでしょうか?
エクセルVBAについて教えてください。

ファイルのタイトルバーのところに、文字を入れたくてVBAコードを調べていたら
Workbooks.Application.Caption = "タイトル"
と言うコードが出てきました。

このコードでやりたいことが行えるので問題ないのですが、
なぜファイル(ブック)は一つしか開いてないのに、「Workbooks」なのでしょうか?

Aベストアンサー

■Application クラス
・EXCEL本体の親ウインドウ側のクラス
・主なプロパティとして
Caption EXCEL本体のタイトルバーの文字列
Visible EXCEL本体を表示/非表示
TOP,LEFT,WIDTH,HEIGHT EXCEL本体の位置や大きさを変更する
Workbooks
EXCEL 本体で開いている ブック(複数)のリスト

■Workbooks クラス
・Workbook クラスのコレクションクラス
・EXCEL を親ウインドウとして ブック(workbook)を複数開く事が出来るためそのリストクラス
・主なプロパティ、メソッドとして
Add 新たなブックを表示する
Open ブックを開く
Item Workbook を選択する
Application 親元の EXCEL

■Workbook クラス
・Workbook ブックのクラス
・主なプロパティ、メソッドとして
Save ブックを保存する
Application 親元の EXCEL
WorkSheets
 ブック内にあるシート(複数)のリスト

■WorkSheets クラス
・WorkSheet クラスのコレクションクラス
・主なプロパティ、メソッドとして
Add 新たなシートを作成する
Item WorkSheet を選択する
Application 親元の EXCEL

■WorkSheet クラス
・WorkSheet シートのクラス
・主なプロパティ、メソッドとして
Range 各セル単位のクラス
Application 親元の EXCEL



だいたいのEXCELクラスの位置づけ(雰囲気)はこんな感じ

■Application クラス
・EXCEL本体の親ウインドウ側のクラス
・主なプロパティとして
Caption EXCEL本体のタイトルバーの文字列
Visible EXCEL本体を表示/非表示
TOP,LEFT,WIDTH,HEIGHT EXCEL本体の位置や大きさを変更する
Workbooks
EXCEL 本体で開いている ブック(複数)のリスト

■Workbooks クラス
・Workbook クラスのコレクションクラス
・EXCEL を親ウインドウとして ブック(workbook)を複数開く事が出来るためそのリストクラス
・主なプロパティ、メソッドとして
Add 新たなブックを表示する
Open ブッ...続きを読む

Q【エクセル2003】シート保護でズームとスクロールを固定させる方法。

連続投稿すみません。お世話になってます。

シートを保護した後、シートの表示(ズーム)を変えられないようにしたいのですがどのようにすれば良いのでしょうか。70%で固定させて使ってもらいたいのです。

また、スクロールさせないようにする方法も知りたいです。

ご教示のほどよろしくお願いします。

Aベストアンサー

こんにちは。

>シートを保護した後、シートの表示(ズーム)を変えられないよう
本来、表示(ズーム)は、相手のPC環境に依存しているので、ユーザーオプションとして固定する方法はありません。

ですから、以下のように、マクロで行う方法しかありません。

標準モジュールの Auto_Open() や
ThisWorkbook モジュールの Private Sub Workbook_Open()
に、以下の中身をそっくり入れると良いです。


Sub TestZoomFixed()
'-----------------------
  '最初にシートの選択を必ずすること
  Worksheets("Sheet1").Select
  With ActiveWindow
    If .Zoom = 100 Then
      .Zoom = 70
    End If
  End With
  With Application.CommandBars.FindControls(, 925).Item(2)
    .Enabled = False
  End With
'----------------------
End Sub

終了時などに、
標準モジュールに、Sub Auto_Close() や

ThisWorkbook モジュールに
Private Sub Workbook_BeforeClose(Cancel As Boolean)
で、以下の中身を入れてあげます。

その反対は、
ズームは保存されますから、必要がなければ、コメントブロックのままにしてよいです。ただ、他のシートも同時に開いていたブックも、メニューからズームが使えなくなっています。(解決方法はあります)
'---------------------------
  Worksheets("Sheet1").Select
  'With ActiveWindow
  '  .Zoom = 100
  '  End If
  'End With
  With Application.CommandBars.FindControls(, 925).Item(2)
    .Enabled = True
  End With
'---------------------------

>スクロールさせないようにする方法

意味がはっきり分からないというか、取り違えているかもしれませんが、スクロールさせないという意味そのものは、スクロールロックをしてしまうことになるので、たぶん違うと思います。

例えば、使わない行や列を下や右端列まで選択し、

 書式-行-非表示、
 書式-列-非表示

としてしまう方法があります。その後で、

他にも、マクロで、シート・プロパテイのScrollArea というものがあって、その範囲を設定させてしまうと、範囲から外にはスクロールが出来なくなります。

例:
ThisWorkbook モジュールなどに入れてあげます。
Worksheets("Sheet1").ScrollArea ="A1:E10"

こんにちは。

>シートを保護した後、シートの表示(ズーム)を変えられないよう
本来、表示(ズーム)は、相手のPC環境に依存しているので、ユーザーオプションとして固定する方法はありません。

ですから、以下のように、マクロで行う方法しかありません。

標準モジュールの Auto_Open() や
ThisWorkbook モジュールの Private Sub Workbook_Open()
に、以下の中身をそっくり入れると良いです。


Sub TestZoomFixed()
'-----------------------
  '最初にシートの選択を必ずすること
  W...続きを読む

Qアクセス2000で作成したデータベースにテーブルを追加したいのです 「Set tbl = catDB.Tables![会費管理2]」 

アクセスで作成したデータベースがあります。
簡単にテーブルを追加するプログラムを作成したいのですが可能かしら?
現在[会費管理2]というテーブルが無いので[会費管理2]と言うテーブルを追加して、そのテーブルに各フィールドを作成したいのです。
作成したSet tbl = catDB.Tables![会費管理2] に
'以下追加したいフィールド
Set colAdo = New ADOX.Column
With colAdo
.Name = "数値1"
.Type = adInteger
.Attributes = adColNullable
End With
tbl.Columns.Append colAdo
Set colAdo = New ADOX.Column
With colAdo
.Name = "数値2"
.Type = adInteger
.Attributes = adColNullable
End With
tbl.Columns.Append colAdo
Set colAdo = New ADOX.Column
With colAdo
.Name = "数値3"
.Type = adInteger
.Attributes = adColNullable
End With
tbl.Columns.Append colAdo
Set colAdo = New ADOX.Column
With colAdo
.Name = "日付"
.Type = adDate
.Attributes = adColNullable
End With
tbl.Columns.Append colAdo
Set colAdo = New ADOX.Column
With colAdo
.Name = "金額"
.Type = adCurrency
.Attributes = adColNullable
End With
tbl.Columns.Append colAdo
Set colAdo = Nothing
Set tbl = Nothing
Set catDB = Nothing
cnn.Close
End Sub

アクセスで作成したデータベースがあります。
簡単にテーブルを追加するプログラムを作成したいのですが可能かしら?
現在[会費管理2]というテーブルが無いので[会費管理2]と言うテーブルを追加して、そのテーブルに各フィールドを作成したいのです。
作成したSet tbl = catDB.Tables![会費管理2] に
'以下追加したいフィールド
Set colAdo = New ADOX.Column
With colAdo
.Name = "数値1"
.Type = adInteger
.Attributes = adColNullable
End With
tbl.Columns.Append colAdo
Set colAdo = New ADOX...続きを読む

Aベストアンサー

大変申し訳ございません。
私の勉強不足と思います。

> Set tbl = catDB.Tables![会費管理2]

テーブルが無い時点で、上記はエラーとなる気がします。
というより、
![会費管理2]
という記述したことが無いので、申し訳ありません。

私では解決できないと思いますので、他の方の回答を待ってください。

失礼いたしました。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング