none
VBAでファイル検索 RRS feed

  • 質問

  • XP SP3(メモリ512MB)マシンで、
    VBA(Access2003)でプログラムを作っていて、
    fn = dir("?????????.xls") '←"?"9個
    の様な命令を書いたのですが、すると、123456789.xls(これは予定通り)の
    他に、1234567890.xlsや、12345678901.xlsもマッチしてしまいました。

    これは、上記パターンが、
    XPで標準的に作成される、8.3形式の名前にマッチした様です。
    #dir /xにて確認
    #なお、DOSプロンプトのdirでも同様。

    他PC(Vista SP1 x64)でやっても同じでしたので思ったのですが、
    これはWindowsが続く限りずっとこのままなのでしょうか?

    #ITProで、Windows7はマイナーアップデートではないか?
    #と書いてありましたし、もしそうでしたら、それなりに初めから
    #考えないといけないので。。。

    もちろん、「Win31FileSystem」をいじればそれ以降出なくなることも
    確認しましたが、人に使ってもらうVBAなので、かなり無理です。

    #この話程度の事は、どこかのH/Pでがいしゅつだと思ったの
    #ですが、なかなかどこにも見つからず、UPしました。

    2008年8月23日 0:08

回答

すべての返信

  •  kuwadgi さんからの引用
    XP SP3(メモリ512MB)マシンで、
    VBA(Access2003)でプログラムを作っていて、
    fn = dir("?????????.xls") '←"?"9個
    の様な命令を書いたのですが、すると、123456789.xls(これは予定通り)の
    他に、1234567890.xlsや、12345678901.xlsもマッチしてしまいました。



    よくわかりませんが Dir はやめて FileSystemObject で自前で実装した方が良いと思います。



    #この話程度の事は、どこかのH/Pでがいしゅつだと思ったの
    #ですが、なかなかどこにも見つからず、UPしました。

     

    こういう場所では既出と書きましょう。

    「がいしゅつ」 はアングラ系の掲示板で使われている言葉で一般的ではありません。

    2008年8月23日 3:11
  • fn = dir("?????????.xls")

    は、そのままにして、更に、

    If fn Like "?????????.xls" Then

    で、二重に絞り込むのがお勧めです。

    2008年8月23日 5:29
  •  ウィンドウズスクリプトプログラマ さんからの引用

    If fn Like "?????????.xls" Then


    これいただきです。すごいです。

    あと、 >じゃんぬねっとさん)これからは、気をつけます。
     
    2008年8月23日 8:20
  • じゃんぬねっとさんの「C#とVB.NETの入門サイト」にて、

    トップ > サンプル > Visual Basic 6.0 (VB6) > ファイル (File) > ファイルの存在を確認する
    を拝見しました。

    ここで(僭越ながら)気づいた点を1つ申します。

    >Dir 関数を使用するか、(中略)
    >Dir 関数は 255 バイトを超えるパスには対応しておりません。(中略)
    >必ず、FileSystemObject の FileExists メソッド(中略)

    という記述が有りますが、自分はこれだけだと、
    “長さは、ドライブレターを切るからいいや”と思い、“部品が実行環境に無いこと”を
    恐れてDir関数を使いがちです。(今回もそうでした)

    しかし、Dir関数に、
    fn = dir("?????????.xls") '←"?"9個
    の様な命令を書いたのですが、すると、123456789.xls(これは予定通り)の
    他に、1234567890.xlsや、12345678901.xlsもマッチしてしまいました。
    という問題も有るのだとすると、がんばって「FileSystemObject の FileExists
    メソッド」をマスターする気にもなります。

    その点も注意を喚起すべきでは無いでしょうか?

    2008年8月23日 8:42