ファイルが既に開いているか調べ開いていない時はファイルがフォルダー内にあるか確認しファイルを開く

ファイル検索 Excel VBA For Each…Next

VBAを使って実務でファイル検索をするとエラーが頻繫に出て使いづらくて困ったなと思う場面が出てきます。

そのためエラーが出ることを想定して複数の処理を組み合わせてプログラムを作成するとスムーズにファイル検索できるようになると思います。

ここでは2つのコードを組み合わせてファイル検索のプログラムを作成しました。

Sub ファイルの検索()

Dim name As String
name = Range("A1").Value      'A1セル値(検索するファイル名)を変数nameに格納します。

Dim ブック As Workbook
Dim Flag As Boolean

For Each ブック In Workbooks '検索したファイルが開いているか調べます。

If ブック.name = name & ".xlsx" Then Flag = True

Next ブック

If Flag = True Then '検索したファイルが開いていた場合の処理。

MsgBox "「" & name & "」" & "のファイルは既に開いているので最前面に表示します。"

Workbooks(name & ".xlsx").Activate '開いていたファイルを最前面に表示します。

Exit Sub

Else '検索したファイルが開いていない場合はファイルを開きます。

If Dir(ThisWorkbook.Path & "\フォルダ\" & name & ".xlsx") <> "" Then 'ファイルがフォルダ内にあるか調べます。

Workbooks.Open Filename:=ThisWorkbook.Path & "\フォルダ\" & name & ".xlsx" 'ファイルを開きます。

Else 'ファイルがフォルダ内に無いときはメッセージを表示します。

MsgBox "ファイルはフォルダ内にありません。"

End If

End If

End Sub
検索したファイルが開いているか調べます

検索して指定したファイルが既に開いていると「○○○.xlsxは既に開いています。2重に開くと、これまでの変更内容は破棄されます。○○○.xlsxを開きますか?」というエラーメッセージが表示されます。そのため事前にファイルが開いているか調べるコードをプログラムに入れておけばエラーメッセージを出さずにファイル検索ができるようになります。

ファイルがフォルダ内にあるか調べます

検索してファイルが無かったときは「実行時エラー’1004’ ○○○.xlsxが見つかりません。ファイル名およびファイルの保存場所が正しいかどうかを確認してください。」のエラーが表示されます、事前に検索するフォルダ内にファイルがあるか調べてからIfステートメントで条件分岐して開くようにすればファイルがフォルダ内に有ったときはファイルを開いて、もし無かったときは「ファイルはフォルダ内にありません。」とメッセージを表示してプログラムを終了することができます。

コメント