tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^5: 既存のExcelファイルにシートを追加
投稿日: 2008/05/02(Fri) 21:12
投稿者魔界の仮面弁士
> 「.Activate」、「.Select」の意味、使い方などもエクセルのヘルプでしょうか。
ですね。正確には Excel 本体のヘルプでは無く、「Excel VBA」のヘルプですけれども。


> xlBook.Worksheets.Add
> xlBook.ActiveSheet.Move After:=xlBook.Worksheets(xlBook.Worksheets.Count)
追加してから移動する方法ですね。それでも良いと思います。

ただし、シートの Move は、ウィンドウが非表示の場合などには使えないので、
YK さんが提示されたように、Add 時に位置を指定する方が安全かつ効率的です。

それと、このような場合に ActiveSheet プロパティを使う事はあまりお薦めできません。
 Set foo = xlBook.Worksheets.Add()
 foo.Move After:=……
のように、操作対象のシートを明示した方が良いでしょう。


> 教えて頂いた、シートの追加で、画面を終了させずに、連続してシートの追加
> (Excelへのデータの設定)を行ったのですが、2回以降は、エラーが発生して
> してしまいます。
今回の場合、
> Set xlSheet = xlBook.Worksheets.Add(after:=Worksheets(xlBook.Worksheets.Count))
がその原因です。

after:=Worksheets(〜) ではなく、
after:=xlBook.Worksheets(〜) とせねばなりません。

親オブジェクトの指定(この場合は xlBook)を忘れていると、今回のように
2回目以降の動作が失敗したり、Excel が終了しなくなるなどの問題を引き起こします。


複数のブックを同時に開いて操作するような場合を想像してみてください。
単に Workbooks と記述した場合、その処理対象となるのが、
xlBook1.Workbooks なのか、xlBook2.Workbooks の事なのか、不明瞭になりますよね。

ですから、外部から Excel を操作するような場合は、親オブジェクトを明示的に
指定する事は必須の作業と言えるでしょう。

>     strToday = Year(Date) & Format(Month(Date), "0#") & Format(Day(Date), "0#")
今回使っている言語は、(VBScript では無く)VB なのですから、
 strToday = Format(Date, "yyyymmdd")
と書いた方がスッキリ書けますよ。

>     Set xlApp = CreateObject("Excel.Application")
参照設定している場合は、
 Set xlApp = New Excel.Application
の方が良いでしょう。

> tmpSheet = ws.Name
> If InStrB(1, tmpSheet, strExcelSheet, -1) <> 0 Then
なぜ、(InStr ではなく)InStrB を使っておられるのでしょうか?

>     With xlSheet
>     End With
これは一体?

>     Do Until objDs.EOF
ちなみに、Recordset オブジェクトの内容をワークシートに転記するために、
CopyFromRecordset というメソッドが用意されていたりもします。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。