• 締切済み

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ドライブではローカル環境であることに変わりないのになぜ?という感じです。 プログラム的に直した方がいいのか仕様なのかバグなのか知りたいところです。 よろしくお願いします。

みんなの回答

回答No.2

>これをいざ実行してみると次のパターンで動作します。 おかしいです。当方がWindows7、EXCEL2013で試したら デスクトップ:どちらも認識 Dドライブ:どちらも認識 ネットワーク上:どちらも認識 になりました。 >個人的にはプログラム的にもxlsxは認識しないのが正しいような気がしていますが、作成者はどちらも認識するのを想定しているようです。 DIR関数ですが、Windowsの仕様上「3文字の拡張子を指定したら、大文字小文字を無視して、拡張子が指定した3文字で始まるファイルがすべて検索される」ようになっています。 なので「*.xls」を指定すると、.xls以外に、.xls$とか.xlsmとか.xlsxとか、4文字目以降が何であってもヒットします。 実は「*.xls」は「*.xls*」と同じ意味(4文字目以降があっても無くても良く、あった場合は何があっても良い)なのです。 なので「どちらも認識する」で正しいです。 Dドライブやネットワーク上で「xlsのみ認識」ってのは「何かの間違い」でしょう。テスト環境にファイルをきちんと格納して無かったとか、両方置いたつもりでxlsしか置いてなかったとか、アクセス権をきちんと設定してなかったとか、何か見落としがあった筈です。 仕様上は「どちらも認識される筈」です。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

関連するQ&A