- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBScriptでExcel(インデックスが…))
VBScriptでExcelのファイルの中身を別のファイルにコピーするプログラムで「インデックスが有効範囲にありません」というエラーメッセージが出る理由と、不要なシートが削除されない理由を教えてください。
このQ&Aのポイント
- VBScriptでExcelのファイルの中身を別のファイルにコピーするプログラムを作成していますが、エラーメッセージ「インデックスが有効範囲にありません」と出て止まってしまいます。シート数の問題などを考えると、配列変数の処理が関連しているのかもしれません。
- プログラムの最初に「On Error Resume Next」を置くと、正常にファイルの中身をコピーして保存することができます。一方、22行目から24行目で「Original.xls」の不要なシートを削除しているはずなのに、常に19個削除されてしまいます。正しくシートを削除する方法が分かりません。
- 質問はややこしいですが、エラーメッセージ「インデックスが有効範囲にありません」の解決法と、シート削除の方法について教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
実際に動きをみていませんが、ソースをざっと眺めて気付いたのが…… 22~24行で、開いたOriginal.xlsの不要なシートを削除していますよね。 そのあと、別名保存していますが、Original.xls自体を開きなおして居ませんので、次のファイルを処理する時にシートが足りなくなっているように思えます。 また、23行目の削除ですが、使用する変数はsではなくiではないでしょうか。
その他の回答 (1)
- mt2008
- ベストアンサー率52% (885/1701)
回答No.2
ANo.1です、 削除の部分ですが、↓この様にしてはいかがでしょう。 For i = 20 to (s + 1) step -1 '22 .Worksheets(i).Delete '23 ←ここ、w.Worksheets… じゃないですか? Next '24 あと、37行目でsetがsrtになっています。
質問者
お礼
すみません! ありがとうございます。 23行目は、うっかり削除してしまっただけで、 プログラムではちゃんと 「w.Worksheets(s + 1).Delete」 としています。 また同じく、srtもプログラムでは 「Set」としています。 お騒がせしました。 なお、 For i = 20 to s + 1 Step -1 なら、やってみてダメでしたが、 (s + 1)はまだやってませんので すぐにやってみます。 ありがとうございました。 なお、「w.Worksheets(i).Delete」は No.1で答えて下さった「mt2008」さんの方に 説明しています。
お礼
さっそく、ありがとうございます。 「Original.xls」を開いていない! 確かに、そうですね。 原因が分かりました。 ありがとうございました。 自分でプログラムを見ているだけでは なかなか気付かず、本当にありがとうございました。 なお、最初は 「w.Worksheet(i).Delete」とやったのですが、 これでは例えばシートが3つの場合、 最初に4番目が削除されると、 シートの数が1つ減るので 5番目というのが元々の6番目なので 結果として、偶数番目だけが削除されます。 従って、単純に「i」には出来ないので、 For i = 20 to s + 1 Step -1 も試したのですが、こちらもダメでした。 大変早くご回答頂き助かりました。