• 締切済み

返ってくる値が違う

VBAでフォルダの中のファイルの個数を取得するコードなのですが Sub test1() Dim i As Long, buf, Path As String Path = ActiveWorkbook.Path & "\" buf = Dir(Path & "*.*") Do While buf <> "" i = i + 1 buf = Dir() Loop MsgBox "「" & ActiveWorkbook.Path & "」には、全部で" & i & "個のファイルがあります。" End Sub Sub test2() Dim Path As String Dim i As Long, FSO As Object, f As Object Path = ActiveWorkbook.Path & "\" Set FSO = CreateObject("Scripting.FileSystemObject") MsgBox "「" & ActiveWorkbook.Path & "」には、全部で" & FSO.GetFolder(Path).Files.Count & "個のファイルがあります。" Set FSO = Nothing End Sub Test1とtest2では返ってくる値が違うのですが なぜでしょうか? Test2はフォルダの個数も取得されてるのですか?

みんなの回答

  • samtomsan
  • ベストアンサー率55% (1060/1897)
回答No.2

test1のDir関数は属性の指定をしない場合はNormalなファイルのみになります。 test2のFileSystemObjectでは隠しファイルやシステムファイルも含まれます。 下記に同じ様なサンプルがありますから、セルに表示する部分を追加して、セルに表示されたファイル名を確認してみてください。 http://www.moug.net/tech/exvba/0060001.html 隠しファイルなどを確認したい場合はフォルダオプションの表示の最後の「保護されたオペレーションシステムファイルを表示しない」のチェックを外せば確認できます。 ただし、確認後に元に戻しておいたほうが良いかと思います(チェックを入れておく)。

回答No.1

こんばんは。 フォルダの中に、標準ファイル以外のファイルがあるんじゃないかな? たとえば、隠しファイルなんかがあると、見つけてくれません。 buf = Dir(Path & "*.*", vbHidden) としてみたらどうなりますか? Dir関数の、第二引数をいろいろ変えて試してください。 以下、Dir関数のヘルプより vbNormal   0  標準ファイル vbReadOnly  1  読み取り専用ファイル vbHidden   2  隠しファイル vbSystem   4   システム ファイル vbVolume   8   ボリューム ラベル vbDirectory 16 フォルダ vbAlias    64  エイリアス ファイル