エクセルVBAでのインデックスが有効範囲エラーの原因と解決方法

このQ&Aのポイント
  • エクセルVBA初心者が共有サーバー上のエクセルファイルを開く際に、インデックスが有効範囲にないエラーが発生します。このエラーの原因は、データ保存用エクセルファイルが見つからないか、開いた後に見つからなくなっていることです。
  • エラーが発生する箇所は、Windows("データ保存.xls").Activateです。この行でエラーが起こり、次の行のSheets("データ貼り付け").Selectでも同様のエラーが発生することがあります。
  • エラーの解決方法としては、以下の点に注意する必要があります。まず、共有サーバー上のファイルパスが正しいか確認しましょう。また、データ保存用エクセルファイルが開かれた状態であることを確認し、開いた後に見つからなくなっていないかも確認してください。
回答を見る
  • ベストアンサー

エクセルVBA インデックスが有効範囲にありません

エクセルVBA初心者です。 共有サーバーに置いたエクセルファイルを開いたときに、同フォルダにある、別のデータ保存用エクセルファイルのデータをコピーしてくるようにしました。 しかし、「インデックスが有効範囲にありません」のエラーになります。 ChDir "\\共有サーバー\Aフォルダ\" Workbooks.Open Filename:= _ "\\共有サーバー\Aフォルダ\データ保存.xls" Windows("データ保存.xls").Activate Sheets("データ貼り付け").Select ここでエラーになります→ Windows("データ保存.xls").Activate エラー時、データ保存.xlsは開いた状態(Activate)になっており、開いた後に見つからない状態?になっているのでしょうか。 ちなみに Windows("データ保存.xls").Activate をスルーさせると、次のSheets("データ貼り付け").Select で同様のエラーになります(当たり前かな)。 試しに、記録マクロで動作を記録してコードを確認しましたが、 Windows("データ保存.xls").Activate となっており、違いがありません。 原因を教えていただければありがたいです。 よろしくお願いします。

  • T-KW
  • お礼率66% (12/18)

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

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

Workbooks.Open Filename:= Thisworkbook.path & "\データ保存.xls" Sheets("データ貼り付け").Select でいいのでは。 データ保存.xlsを明示的に表現したいのであれば、 Sheets("データ貼り付け").Selectの前に Workbooks("データ保存.xls").Activate を追加

T-KW
質問者

お礼

回答ありがとうございます。 とりあえず解決しました! このコードは、ThisWorkbookモジュールの「Workbook_Open」に記述していたのですが、新たに標準モジュールに記述し、ThisWorkbookモジュールの「Workbook_Open」にはApplication.Runで標準モジュールを走らせるようにしたらうまくいきました。 ThisWorkbookモジュールで何故エラーになるのかは理解していませんが、とりあえずよかったです。もっと勉強します。 教えて頂いた方法も試してみます。 ありがとうございます。

その他の回答 (1)

  • ppyama
  • ベストアンサー率12% (48/399)
回答No.1

データ保存.xlsが開く前に次のコードが走っているとか ウエイトを入れてみては? Application.Wait Now() + TimeValue("00:00:05") ’5秒待つ

T-KW
質問者

お礼

回答ありがとうございます。 とりあえず解決しました! このコードは、ThisWorkbookモジュールの「Workbook_Open」に記述していたのですが、新たに標準モジュールに記述し、ThisWorkbookモジュールの「Workbook_Open」にはApplication.Runで標準モジュールを走らせるようにしたらうまくいきました。 ThisWorkbookモジュールで何故エラーになるのかは理解していませんが、とりあえずよかったです。もっと勉強します。 教えて頂いた方法も試してみます。 ありがとうございます。

関連するQ&A

  • 【Excel VBA】ブックを複数開いている際、任意のブックをアクティブにしたい

    OS:Windows XP Office:2003 複数のエクセルブックを開いている状態で、 ある任意のブックをアクティブにしてセルの操作(コピペなど)をしたいのですが、 "インデックスが有効範囲にありません"とエラーになってしまいます。 現在のソースは、 strFileName = "\\共有サーバー\共有\TEST.xls" Windows(strFileName).Activate ←ここでエラーになる Sheets("Sheet1").Select Cells.Select Selection.Copy Windows("貼り付け先.xls").Activate Sheets("Sheet1_n").Select Cells.Select ActiveSheet.Paste です。 どこが悪いんでしょうか? 正しいコーディングを教えてください。 よろしくお願いします。

  • エクセル2007VBAで新規ファイルを作る場合

    現在A社というファイルのsheet1に電気代と名前を付けたデータ、sheet2に ガス代という名前を付けたデータがあり電気代のブックからコピーして新規ファイルに貼り付けをしたいと思い下記のとおりマクロがありますが、新規ブックを開いた時常に1ではなく他に新規ブックを開いていたら2とか3になってしまいます。すると再度新規ブックに戻ってガス代を貼り付ける時2とか3tpか4とかでしたらエラーになってしまいます。 こういう場合どのように書いたら良いのでしょうか? それから最後に新規ファイルで名前を付けて保存のところまでダイアログ出すところまで 教えていただきたいのですが。 マクロ勉強始めたばかりでよろしくお願います。 Sub DGCopy() Cells.Select Selection.Copy Workbooks.Add Cells.Select ActiveSheet.Paste Sheets("Sheet1").Select Sheets("Sheet1").Name = "電気代" Windows("A社.xls").Activate Sheets("電気代").Select Cells.Select Application.CutCopyMode = False Selection.Copy Windows("Book1").Activate Sheets("Sheet2").Select Cells.Select ActiveSheet.Paste Sheets("Sheet2").Select Sheets("Sheet2").Name = "ガス代" Application.CutCopyMode = False End Sub

  • Excel VBA(マクロ)処理中の画面に”お待ち下さい”を表示させたい。

     Excel2002で帳票印刷の処理を作成しました。 該当ブック(自身.xls)オープンすると最初にVBAにより帳票レイアウトの初期化を行います。(原紙.xlsをオープンし、自身のシートに貼り付けます。)この初期化の貼り付け処理が"原紙"と"自身"のシートを交互にアクティブにしている為、画面がちらついて、とても見苦しい状態です。 Sub 帳票初期化()  Workbook.Open Filename="F:\原紙.xls"  Sheets("帳票1").Select  Cells.Select  Selection.Copy  Windows("自身.xls").Activate  Sheets("帳票1").Select  Cells.Select  ActiveSheet.Paste  Windows("原紙.xls").Activate  Sheets("帳票2").Select  Cells.Select  Selection.Copy  ・・・・・・・・・(以下同様処理を8帳票程)  Windows("原紙.xls").Activate  ActiveWindow.Close  Windows("自身.xls").Activate End Sub (動作確認済み。手打鍵にて誤コマンドご容赦) この処理を”お待ち下さい”画面等で実行中だけ見えない状態にする、又は画面より見えない形で行うにはどうすれば良いでしょうか。

  • エクセル2000マクロインデックスエラー

    下記のマクロでインデックスが有効範囲にありません。 Windows(F_NAME).Activate→エラー個所 Sheets(M_KAKOBA(count)).Select→エラー個所 教えてください。 Dim work, hensu, i, j, h Windows("加工品.xls").Activate work = Sheets("masta").Cells(3, 6).Text 'シート名の変更 Windows(F_NAME).Activate Sheets(M_KAKOBA(count)).Select ActiveSheet.Name = work

  • EXCEL VBA セルからファイル名を読み込む

    EXCEL VBAについての質問です 同じ処理を名前の違う複数のファイルで行いたいと思っています そこで、セルA2へファイル名の『○○.xls』○○部分だけをそれぞれのファイルに書き込んでおき、マクロは共通にしてファイル名をそれぞれのファイルから読み込んで実行したいと思っています。 良い方法を教えてください。 Workbooks("200809.csv").Activate Sheets("200809").Select Range("C3:C33").Copy Windows("○○.xls").Activate'←ここをファイルにあわせて変更できる形にしたい Sheets("報告書").Select Range("G5:G35").Select ActiveSheet.Paste Windows("200809.csv").Activate Range("K3:K33").Copy Windows("○○.xls").Activate’←ここ Sheets("報告書").Select Range("I5:I35").Select ActiveSheet.Paste Workbooks("200809.csv").Close SaveChanges:=False よろしくお願いします。

  • エクセル VBA

    印刷ページを指定して印刷したいのですが 以下の文章だと何処が間違いなのでしょうか。 Windows("あああ.xls").Activate Sheets("かかか").Select Dim c As Integer c = Range("A1").Value Sheets("さささ").Select ActiveWindow.SelectedSheets.PrintOut From:=1, To:=c, Copies:=1, Collate _ 仕事で詰まってしまいました。 自分のPC(エクセル2000)だと動くのですが、 他のPCへメールで飛ばしたら 最後の文章でエラーが出るそうなんですが。

  • エクセル bookの名称

    Sub 登録() Workbooks.Open Filename:= _ "\\buckup1\センタ\データ\連絡をください\シート.xls" Windows("入力.xls").Activate Sheets("管理").Select Sheets("管理").Copy Before:=Workbooks("シート.xls").Sheets(1) End Sub 上記はマクロの自動記録で行ったものですが、このマクロが入ってるbookを名前を変えて保存して(例えば"顧客管理"など)上記を実行すると、上記3行目のbookの名前でないのでエラーが出てきます。上記のbookを名前を変えて保存すると3行目の部分もそれに合わせて自動で変わるように(入力→顧客管理)出来ますでしょうか。

  • マクロを教えてください

    同じフォルダ内にあるXlsブックのあるSheetのデータを他のBookにコピーして貼り付けて貼り付けた側のBookで加工したいのですがうまくマクロが組めません。 Bookを共有で使っているので困っています。 Sub ワードアート1_Click ' ActiveWindow.ScrollWorkbookTabs sition:=xlLast Workbooks.Open ("販売管理表み.xls") Sheets("在庫一覧").Select Cells.Select Range("A1").Activate Selection.Copy Windows("完成在庫.xls").Activate Sheets("完成在庫一覧").Select Range("A1").Select ActiveSheet.Paste End Sub って書いてみましたが、Workbooks…のところでエラーになってしまいました。(TOT)初心者ですみません。教えてください。

  • VBA 他のエクセルファイルデータを読み込む

    エクセルのVBAに関する質問です。 かじった程度の知識でがんばってはみたのですが、以下のことがどうしてもできません。 集計ファイルと、それぞれが入力するファイルがいくつか(具体的には1A.xls、1B.xls、2A.xls、2B.xlsといった数字とアルファベットの組み合わせ)あります。 入力ファイルに書かれているデータを集計ファイルに取り込もうと考えています。 入力ファイル名が(1.xls,2.xls・・・)の様に数字だけの取り込みはできました。 m = Val(UserForm2.TextBox1.Text) For i = 1 To m On Error GoTo myError Workbooks.Open Filename:="C:" & i & ".xls", UpdateLinks:=0 Range("f65536").End(xlUp).Activate Workbooks(i & ".xls").Activate Sheets("入力ファイル").Select Range("A3:X52").Select Application.CutCopyMode = False Selection.Copy Workbooks("集計ファイル.xls").Activate Sheets("DB").Activate Range("a65536").End(xlUp).Activate Selection.Offset(1).Select ActiveSheet.Paste Range("a65536").End(xlUp).Select   Workbooks(i & ".xls").Close SaveChanges:=False myError: Next i Application.DisplayAlerts = True こんな感じです。 これを、数字だけでなく数字+アルファベット.xlsのファイル名にしてデータを取り込むにはどうすればいいのでしょうか?色々と試行錯誤をしたり、ネットで調べたりしたのですが、詰んでしまいました。 どなたかお助け下さい。

  • シートをコピーする際のVBAコードについて

    お世話になります。 sample.xls というファイルがあります。 このファイルの中にVBA処理にて、現在のシートをコピーする処理を行います。 Windows("sample.xls").Activate Sheets("sheet1").Select Sheets("sheet1").Copy after:=Sheets(Sheets.Count) sample.xlsは原本ファイルとなり、実際の運用時は拡張子の前に年月を表示する 形で保存されます。 (sample201106.xls、sample201109.xlsなど) こうなってしまうと、VBAで定義した Windows("sample.xls").Activate ファイル名が変わることで、この部分にエラーが生じます。 ファイル名が変更されても、上記コードがうまく機能するようにする方法はありますでしょうか? アドバイスいただけたらと思います。 よろしくお願いします。

専門家に質問してみよう