こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

office2013とoffice2016で確認し

office2013とoffice2016で確認したのですが、excelのvbaでフォルダ内のファイルを取得する「dir」を使って処理を行うと異なる動作をしたので教えていただきたいです。

下記はプログラムの一部抜粋です。
dim buf as string
dim filepath as string
buf = dir(filepath & "¥*.xls")
do whike bud <> ""
(実処理)
buf = dir()
loop

このとき読み込むフォルダには拡張子xlsとxlsxを1つずつ格納してあります。
これをいざ実行してみると次のパターンで動作します。
・デスクトップにある場合 : どちらも認識
・Dドライブにある場合 : xlsのみ認識
・ネットワークドライブにある場合 : xlsのみ認識

個人的にはプログラム的にもxlsxは認識しないのが正しいような気がしていますが、作成者はどちらも認識するのを想定しているようです。
であればどのパターンでも認識しないのはおかしいですし、デスクトップとDドライブではローカル環境であることに変わりないのになぜ?という感じです。
プログラム的に直した方がいいのか仕様なのかバグなのか知りたいところです。
よろしくお願いします。

投稿日時 - 2018-06-19 15:54:38

QNo.9509905

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

>これをいざ実行してみると次のパターンで動作します。

おかしいです。当方がWindows7、EXCEL2013で試したら

デスクトップ:どちらも認識
Dドライブ:どちらも認識
ネットワーク上:どちらも認識

になりました。

>個人的にはプログラム的にもxlsxは認識しないのが正しいような気がしていますが、作成者はどちらも認識するのを想定しているようです。

DIR関数ですが、Windowsの仕様上「3文字の拡張子を指定したら、大文字小文字を無視して、拡張子が指定した3文字で始まるファイルがすべて検索される」ようになっています。

なので「*.xls」を指定すると、.xls以外に、.xls$とか.xlsmとか.xlsxとか、4文字目以降が何であってもヒットします。

実は「*.xls」は「*.xls*」と同じ意味(4文字目以降があっても無くても良く、あった場合は何があっても良い)なのです。

なので「どちらも認識する」で正しいです。

Dドライブやネットワーク上で「xlsのみ認識」ってのは「何かの間違い」でしょう。テスト環境にファイルをきちんと格納して無かったとか、両方置いたつもりでxlsしか置いてなかったとか、アクセス権をきちんと設定してなかったとか、何か見落としがあった筈です。

仕様上は「どちらも認識される筈」です。

投稿日時 - 2018-06-19 16:51:04

ANo.1

http://www.moug.net/tech/exvba/0100048.html
参考に

投稿日時 - 2018-06-19 16:05:07

あなたにオススメの質問