[[20130627191302]] 『インデックスが有効範囲にありませんのエラー』(kyoko) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『インデックスが有効範囲にありませんのエラー』(kyoko)

Private Sub Workbook_Open()

Dim Input_File_A_WbName As String
Dim Input_File_A_WsName As String
Dim Wkdir As String
Dim Ws As Worksheet
Dim Rmax As Long
Dim FSO As Object
Dim WsFlag As Boolean

'現在のディレクトリ情報取得
Wkdir = ActiveWorkbook.Path
'入力ファイル ファイル名取得
Input_File_A_WbName = Worksheets("AAA).Range("C4")
'入力ファイル シート名取得
Input_File_A_WsName = Worksheets("AAA").Range("C5")

'入力ファイル ファイルが存在するか確認
If Dir(Wkdir & "\" & Input_File_A_WbName) = "" Then

    Range("D4") = "←ファイルが存在しません"
Else
    Workbooks.Open (Wkdir & "\" & Input_File_A_WbName)
    ActiveWorkbook.CheckCompatibility = False
    Windows(Input_File_A_WbName).Activate
    For Each Ws In Worksheets
        If Ws.Name = Input_File_A_WsName Then WsFlag = True
    Next Ws

End If





上記コードにて、下の方に記述してある
Windows(Input_File_A_WbName).Activate で
「インデックスが有効範囲にありません」のエラーになります。
何故でしょうか?
試しに他のウィンドウを開いて、そのウィンドウ名を指定してもエラーに
なります。
なお、C4にはファイル名が書かれています。「○○○.xls」

開いたファイルをWindows(Input_File_A_WbName).Activate
としているのは、そうしないと
その次のWs に本マクロのシートが入ってきてしまうからです。


    with Workbooks.Open(Wkdir & "\" & Input_File_A_WbName)
       .CheckCompatibility = False
       For Each Ws In .Worksheets
        If Ws.Name = Input_File_A_WsName Then WsFlag = True
       Next Ws
    end with

 としてみては?

 ichinose


 少し勘違いをしているようなので。

 >開いたファイルをWindows(Input_File_A_WbName).Activate 
 >としているのは、そうしないと 
 >その次のWs に本マクロのシートが入ってきてしまうからです

 これが標準モジュールに書かれたコードならその通りだけど、ThisWorknbookモジュールに書かれたコードで
 ブック修飾を省略するとマクロブックと見なされる。
 なので、いくらよみこんだブックをアクティブにしても(そもそも、すでにアクティブだよね?)意味がない。

 ブック修飾はichinoseさんご提示のようなもの等々、いろんな方法があるけど、手っ取り早くやるなら

 For Each Ws In ActiveWorkbook.Worksheets かな?

 もちろん、Windows(Input_File_A_WbName).Activate は不要。

 (ぶらっと)


 追伸

 ファイルI/Oのエラーは、ファイルが存在しない だけではありません。

 シェアエラー等のエラーや普段起こりえないエラーが発生する可能性があります。

 On Error Resume Next 等でエラーチェックをする必要はありますよ

    on  error resume next 
    with Workbooks.Open(Wkdir & "\" & Input_File_A_WbName)
       if err.number=0 then
          .CheckCompatibility = False
          For Each Ws In .Worksheets
             If Ws.Name = Input_File_A_WsName Then WsFlag = True
          Next Ws
       else
          msgbox Err.Description
       end if
    end with
    on error goto 0

 一例です。

 ichinose


ichinoseさん、ぶらっとさん

 ありがとうございます!!
 
 いま実行環境が無いので明日やってみます。

 そう、標準モジュールではなく、ThisWorkBookなんです。
 ブックを開いた直後に実行した欲しいからです。

kyoko


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.