[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『インデックスが有効範囲にありませんのエラー』(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
ありがとうございます!!
いま実行環境が無いので明日やってみます。
そう、標準モジュールではなく、ThisWorkBookなんです。
ブックを開いた直後に実行した欲しいからです。
kyoko
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.