VB.NETというサイトの「フォルダ以下のファイルを最下層まで検索または取得する」(http://jeanne.wankuma.com/tips/vb.net/directory/getfilesmostdeep.html)に書かれているコードを実行しようとしてもエラーが出てしまいます。どのように修正したら実行されるのか、ご教授いただけないでしょうか。よろしくお願いいたします。
VBAのバージョンは7.0です。
サンプルにある通り、C直下にHogeフォルダを作り、その中にHoge.txtを作ってあります。
標準モジュールに「使用例は以下のようになります。」に書かれているコードを、クラスモジュールには「以下にサンプルコードを示します。」に書かれているコードを張り付けました。クラス名は「GetFilesMostDeep」としています。
下記がコードの内容となっています。
★標準モジュール-----------------------------
Sub Macro4()
' ファイル名に「Hoge」を含み、拡張子が「.txt」のファイルを最下層まで検索し取得する
Dim stFilePathes As String() = GetFilesMostDeep("C:\Hoge\", "*Hoge*.txt")
Dim stPrompt As String = String.Empty
' 取得したファイル名を列挙する
For Each stFilePath As String In stFilePathes
stPrompt &= stFilePath & System.Environment.NewLine
Next stFilePath
' 取得したすべてのファイルパスを表示する
If stPrompt <> String.Empty Then
MessageBox.Show (stPrompt)
End If
End Sub
★---------------------------------------
★クラスモジュール--------------------------------
''' ---------------------------------------------------------------------------------------
''' <summary>
''' 指定した検索パターンに一致するファイルを最下層まで検索しすべて返します。</summary>
''' <param name="stRootPath">
''' 検索を開始する最上層のディレクトリへのパス。</param>
''' <param name="stPattern">
''' パス内のファイル名と対応させる検索文字列。</param>
''' <returns>
''' 検索パターンに一致したすべてのファイルパス。</returns>
''' ---------------------------------------------------------------------------------------
Public Shared Function GetFilesMostDeep(ByVal stRootPath As String, ByVal stPattern As String) As String()
Dim hStringCollection As New System.Collections.Specialized.StringCollection()
' このディレクトリ内のすべてのファイルを検索する
For Each stFilePath As String In System.IO.Directory.GetFiles(stRootPath, stPattern)
hStringCollection.Add (stFilePath)
Next stFilePath
' このディレクトリ内のすべてのサブディレクトリを検索する (再帰)
For Each stDirPath As String In System.IO.Directory.GetDirectories(stRootPath)
Dim stFilePathes As String() = GetFilesMostDeep(stDirPath, stPattern)
' 条件に合致したファイルがあった場合は、ArrayList に加える
If Not stFilePathes Is Nothing Then
hStringCollection.AddRange (stFilePathes)
End If
Next stDirPath
' StringCollection を 1 次元の String 配列にして返す
Dim stReturns As String() = New String(hStringCollection.Count - 1) {}
hStringCollection.CopyTo(stReturns, 0)
Return stReturns
End Function
お礼
n-jun様 あぁなんてことでしょう・・・それじゃあ動くわけがありませんね。。 多分、お答えがなければ気がつかなかったと思います。. URLもとても参考になりました。やりたいことがまさにここに 掲載されていました。 誠にありがとうございましたm(_ _)m