プロが教えるわが家の防犯対策術!

ExcelのVBAで、ファイルが存在するかを調べる為に以下のような記述をしました。

If Dir(filename) = "" Then Err.Raise errnumber

ここで、filenameに通常のファイル名が入る場合は問題ないのですが、filenameにスペースが含まれている場合、明らかにファイルが存在する場合でもErr.Raiseが呼ばれてしまいます。そこで、次の記述を上記のIf文の前に挿入してみました。

filename = """" & filename & """"

ファイル名を「"」で囲めば良いのでは、と考えたのですが、実行すると、

実行時エラー '52'
ファイル名または番号が不正です。

とのエラーが出てしまいます。このように、スペースを含む可能性があるファイル名に対してDir関数を使うにはどのようにすれば良いのでしょうか。よろしくお願いします。

A 回答 (2件)

Excel2010のVBAだと、dir関数は、ディレクトリ名に空白がある場合も、ファイル名に空白がある場合も、どらも正しくファイル名を返しますね。



例えば、Dir("C:\temp\a b\x y") とかで正しく "x y" を返します。

空文字列が返っているのであれば、やはりファイルが存在しないと言うことでしょう。
もういちど見直してください。
    • good
    • 0
この回答へのお礼

ご回答をいただいて、ファイルの読み込みではなくファイルの作成の方に問題があるのかも、と思って見直しました。今回のコードは、まずコマンドベースのプログラムを動かしてファイルを作成して、その後、作成されたファイルを開くコードの前に記述しているものなのですが、ファイルを作成する段階で、空白を含んだファイル名をそのままコマンドライン引数に渡していました。そこで、そちらを""で括るようにしたら解決できました。ありがとうございました。

お礼日時:2013/10/23 12:34

2003でも空白のあるファイル名でも正常にDirでファイル名を返します。



もしかして、違うフォルダでDirを実行されていませんか

ChDriveでドライブをChDirでフルパスでフォルダを指定してみてください。
    • good
    • 0
この回答へのお礼

No.1さんのお礼に記述させていただきましたとおり、ファイルの読み込みではなく作成の方に問題がありました。ご回答いただきましてありがとうございました。

お礼日時:2013/10/23 12:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A