タイトル : Re^5: Excel処理の繰り返しでNG 投稿日 : 2010/02/14(Sun) 10:35 投稿者 : 魔界の仮面弁士
> '前回と同じく、1回目はOKなのですが、2回目以降が旨く処理されない 同じ間違いを繰り返していますよ。 > ' xlSheet.Copy After:=Sheets(1) '別の書き方でも試したが結果は同じ この書き方にしても、 > .Copy After:=Sheets(1) この書き方にしても、 「Sheets」の親オブジェクトが指定されていません。 http://hanatyan.sakura.ne.jp/vbhlp/caution.htm http://hanatyan.sakura.ne.jp/vbhlp/ExcelErr.htm > With xlBook.Sheets.Application Application プロパティを使っているのは、何のためですか? そこから返されるオブジェクトは、既に変数 xlApp に保持されていますよね。 > .ActiveSheet.Activate ActiveSheet を Activate する事に、何の意味があるのでしょうか? また、そもそも ActiveSheet を使うのではなく、どのシートかを 明示的に指定すべきかと思います。 > End 原則として、End ステートメントは使うべきではありません。 替わりに、すべてのフォームを Unload する事で終了させましょう。 End は強制終了の文として、かつての BASIC 言語の互換ステートメントとして 用意されてはいますが、正規の終了処理(QueryUnload イベント等)が呼び出されないため、 時として、意図せぬ動作を引き起こすことが知られています。 http://support.microsoft.com/kb/165824/ja http://support.microsoft.com/kb/81469/en-us > 挿入の部分は、その都度変化するので以前のままでもと思いますが、 ループの方が便利な事も多々あるので、どちらが良いとは一概には言えませんが、 ループ回数が多い場合には、無視できない程の速度差になる事もありますので、 一応、両方の方法を習得しておいた方が良いと思います。 たとえば今回のように、同一箇所に複数行を挿入する場合、 ・「1 行挿入」を X 回繰り返す。 よりも ・「X 行挿入」を1回行う。 方が、Excel との通信回数が減る分、処理効率が良くなります。 特に VB6 から操作するなどの、「外部から」Excel を操作する際には、環境によっては プロパティ/メソッドの通信回数の増加が、ハングアップの要因となる事もあります。 http://support.microsoft.com/kb/414107/ja |