VBAではファイルを読み込むコードでファイルが存在しない場合エラーが発生します。
そのためファイルが存在するかチェックが必要になります。
例)Dドライブのフォルダ名「役職共有」に 0120190801ZA.csv のファイルが存在するかチェックする場合以下のようにします。
Sub ファイル存在チェック() Dim FSO As Object Set FSO = CreateObject(“Scripting.FileSystemObject”) If FSO.FileExists(“D:\役職共有\0120190801ZA.csv”) Then |
ここでは FSO の変数をobject型で宣言を行っています。
CreateObject(“Scripting.FileSystemObject”) でセットします。
CreateObjectは複雑なマクロを使用する時に使用頻度が増えますが、簡潔に言えば エクセルの機能ではなくWindowsの機能や他のアプリケーションの機能を利用する事が出来ます。
エクセルからoutlookを操作してメールを送信することも可能です。
ここで使用するFileSystemObjectはファイルやフォルダを操作する専用オブジェクトです。
最後に Set FSO = Nothing とありますが CreateObjectを使用した後はオブジェクトの参照を解放する必要があります。オブジェクト型変数にNothingを代入して下さい。
Googleで「エクセル マクロ ファイルの存在」のキーワードで検索すると該当するページが表示されます。
これらの中を見ますと ファイルの存在をチェックする方法に Dir関数 を利用した方法があります。
Dir関数を利用したのが以下になります。
Sub ファイル存在チェック() |
Dir関数を使用すると ファイル名を返します。
MsgBox Dir(“D:\役職共有\0120190801ZA.csv”) を実行すると以下のようにファイル名が表示されます。
ファイルが存在しない場合 空白になります。これを利用してファイル名が空白ではない場合ファイルが存在する と判断しています。
こちらの方がコードはシンプルですが私はDir関数を利用したチェックは利用していません。
その理由は、共有フォルダでファイルが存在しない場合にエラーになるからです。
例)
コンピュータ名「desktop1」に共有フォルダ名「役職共有」を作成します。このフォルダに「0120190801ZA.csv」をいれます。
Sub ファイル存在チェック() |
こちらを実行すると以下のように想定した動きになります。
ではコードの共有フォルダ名を 役職の共有 と変更します。
If Dir(“\\desktop1\役職の共有\0120190801ZA.csv”) <> “” Then
共有フォルダ「役職の共有」は存在しないため「ファイルは存在しません」と表示されなければなりません。
しかし実行すると以下のようにエラーになります。
Dir関数を利用したファイルの確認方法では、ネットワーク上では「実行時エラー」が発生します。
共有フォルダを設定しているPCやネットワークドライブの電源が入っていない、LANケーブルが抜けている、共有フォルダ名が異なっている、フォルダが存在しない などの場合にエラーが出てマクロが途中で止まってしまいます。
最初に解説しました「FileSystemObject」ではエラーは発生しません。
これらの事から「FileSystemObject」を使用するチェック方法をお勧めします。