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

締切り済みの質問

返ってくる値が違う

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はフォルダの個数も取得されてるのですか?

投稿日時 - 2012-04-19 20:31:30

QNo.7430174

暇なときに回答ください

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

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

回答(2)

ANo.2

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

投稿日時 - 2012-04-20 00:53:09

ANo.1

こんばんは。

フォルダの中に、標準ファイル以外のファイルがあるんじゃないかな?
たとえば、隠しファイルなんかがあると、見つけてくれません。

buf = Dir(Path & "*.*", vbHidden) としてみたらどうなりますか?

Dir関数の、第二引数をいろいろ変えて試してください。

以下、Dir関数のヘルプより

vbNormal   0  標準ファイル
vbReadOnly  1  読み取り専用ファイル
vbHidden   2  隠しファイル
vbSystem   4   システム ファイル
vbVolume   8   ボリューム ラベル
vbDirectory 16 フォルダ
vbAlias    64  エイリアス ファイル

投稿日時 - 2012-04-19 21:37:17

あなたにオススメの質問