2017年9月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
無料ブログはココログ

« Office FileSearchを代替する。 | トップページ | ショートカットの相対パス »

2008年1月30日 (水)

Office FileSearchを代替する。(その2)

方法 2.5 ディレクトリ再帰はFileSystemObject、ファイル検索はDIR関数と折衷する方法があります。

本来、方法 2.5 は、方法 1 と性能的にコンパラブルなはずですが、MSのサンプルコードは出来があまり良くないようです。

方法 1 は、以下の、方法 2.5 のコードより2倍くらい遅い。

Dim fso As Object
Dim n As Long

Sub Sample()
Dim Folder As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set Folder = fso.GetFolder("C:\")
t1 = Timer
n = 0
Proc Folder
Debug.Print Timer - t1, , n
End Sub

Sub Proc(Folder)
Dim SubFolder As Object
Dim File As String
On Error GoTo e1
For Each SubFolder In Folder.SubFolders
  Proc SubFolder
Next
File = Dir(Folder.path & "\*.xls")
Do While Len(File)
  Debug.Print Folder.path & "\" & File
  n = n + 1
  File = Dir()
Loop
Exit Sub
e1:
Debug.Print Folder.path & "\" & File, File, Err.Number, Err.Description
End Sub

なので、方法 1 を選択するときは、MSのコードを見直したほうがよいでしょう。
2倍くらい速くなるはずです。
GetFileAttributes()で情報を取り直しているのがよくないような。。。

方法 2 は、そういう改善が無理そうなので、方法 2.5 に変えたほうがよいでしょう。

ということで、結局、お勧めは、方法 2.5 か、方法 1 を改善したもの、です。

« Office FileSearchを代替する。 | トップページ | ショートカットの相対パス »