次の方法で共有

VBA DIR("") 引数に空文字を指定した時の挙動

Anonymous
2012-03-01T00:42:12+00:00

DIR()関数を使ってVBAプログラムのコードを書いていますが引数に空文字列を入れた時

DIR("")

 の挙動がよく分かりません。

この結果は、戻り値としてマイドキュメントフォルダの中のある1つのファイルのファイル名が返されています。

カレントフォルダではなくなぜマイドキュメントフォルダなのでしょうか。

よろしくお願いします。

開発者テクノロジ | Visual Basic for Applications

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2012-03-02T11:13:54+00:00

気が付きませんでしたが間違ってると思います。

フォルダ全体を順次検索する場合、

Sub aaa()

Dim wFilename As String

wFilename = Dir("E:")

Do While wFilename <> ""

  MsgBox wFilename

  wFilename = Dir()

Loop

End Sub

と書きます。引数を省略するんですが、そこを間違えて、””をいれちゃったんじゃないかな?

とにかく、DIR("") というのは私は見た記憶がありません。

この回答は役に立ちましたか?

1 人がこの回答が役に立ったと思いました。
0 件のコメント コメントはありません

4 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2012-03-05T00:31:54+00:00

    最初に場所を指定したDIR(場所)を実行してから何も指定しないDIR()を実行するという使い方をするのですね。

    最初、DIR(場所)がなく、いきなりDIR()やDIR("")を実行していたのでDIR()ではエラーになるが、DIR("")ではエラーにならないのでこの原因が分からず仕方なくDIR("")の方で進めていました。

    「初めて呼び出すときにはPathName を指定する必要があります」というアドバイスを松坂伍朗さんから頂いた時には、DIR("")の方しか頭になかったので解決に至りませんでした。

    y sakudaさんのサンプルを試してみて、DIR(場所)の後にDIR()やDIR("")を実行すると

    DIR()の結果はエラーにならず説明の挙動になっているのに対して

    DIR("")の結果は同じファイル名しか返さず変なので

    DIR("")は間違いでDIR()としなければならないことが分かりました。

    ありがとうございました。

    この回答は役に立ちましたか?

    1 人がこの回答が役に立ったと思いました。
    0 件のコメント コメントはありません
  2. Anonymous
    2012-03-01T23:38:21+00:00

    松坂 伍朗さん

    y sakudaさん

    回答ありがとうございます。

    質問する前に以下のサイトを確認していますが

    ここに使用例が書かれていますので使い方は間違ってはいないと思います。

    <http://office.microsoft.com/ja-jp/access-help/HA001228824.aspx>

    「フォルダ内のすべてのファイルについて繰り返すには、空文字列を指定します。Dir("")」

    実際の挙動がここに説明されている内容と少し違っていましたのと、

    Application.FileDialog(msoFileDialogFolderPickerなどのフォルダを選択するダイアログボックスを表示する関数を実行した場合にも、デフォルトではカレントフォルダではなくマイドキュメントのフォルダが開くので、これらの関数に共通して、私のまだ知らない何らかの仕様があるのかなと思ってご質問しました。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  3. Anonymous
    2012-03-01T15:45:08+00:00

    質問の趣旨がなぜ?ということでしたら、松坂さんがおっしゃているように、使い方を間違えているのにVBAがエラーにせず適当に出してきちゃってると言う以外にありません。

    もし、Currentディレクトリを取得したいということでしたら、関数はCurDirです。

    Sub aaa()

    MsgBox CurDir

    End Sub

    そういう質問でなければ無視してください。

    参考まで。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  4. Anonymous
    2012-03-01T13:02:55+00:00

    y__y さん、こんにちは。

    Answers への投稿、ありがとうございます。

    Dir 関数ですが、こちらのページ にもあるように、初めて呼び出すときには、PathName を指定する必要があります。

    PathName を指定しないことで、マイドキュメント中の特定のファイルが返されるということについて、なぜこのような結果になるのか、というのは詳しく分かりませんでした。

    ご質問の VBA に関しての情報ですと、Answers 上ではなかなか有効な情報が集まりにくいかもしれません。

    MSDN フォーラムには VBA フォーラム もありますので、もしよろしければこちらもご活用してみてください。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません