ExcelVBA
1Option Explicit
2
3'FileSystemObjectの参照設定を行うこと
4
5Sub test()
6 ステータス確認 "サンプル"
7End Sub
8
9
10Sub ステータス確認(ByVal seName As String)
11 Dim FSO As Scripting.FileSystemObject
12 Set FSO = New Scripting.FileSystemObject
13 seName = ThisWorkbook.path & "\" & seName
14 If FSO.FolderExists(seName) = False Then Exit Sub
15
16 Dim o As Folder
17 Dim i As Long
18 For Each o In FSO.Getfolder(seName).SubFolders
19 Let i = i + 1
20 Cells(i, 1).Value = o.path
21 Next
22End Sub
参考>>
FileSystemObjectの参照設定を行う
注意点
1)シートの0行目はないので、必ず行番号に使う変数は何か代入してから、
セルを指定する。
2)ループの中で変数を宣言しない。
1度すればいいことを何度もするのは無駄。
ループの回数が多いと処理速度にも影響するかも?
3)なんとなーくでコードを書かない
Cells(i, 1)
とか
= k
とか、
Dim k As Object
とか
Sub ステータス確認(sename)
とか、
つまりたまたま上手く行ったが意味が解ってないままだと、
応用が利きにくいです。
省略が許されているので、書かないというのもありだけど、
自分の意図をコードにはっきり書くことをお勧めします。
現状、「こういう時はこう書く」と単に暗記されているように
見受けました。
例えば、
>Cells(i, 1).Value = o.path
フォルダー「O」のパスをセルの値に設定
そうすれば、変数の型がなんでないといけないかも、
イメージしやすいかと思います。
4)ユーザーにVBEの画面を見させないよう注意する
FSO.Getfolder(seName)
変数に存在しないフォルダーのパスを指定した場合エラーになります。
勝手にフォルダーを削除された、
無意識にフォルダーを移動した等
If FSO.FolderExists(seName) = False Then Exit Sub
と、最初に存在確認をしたら、エラーを回避できます。
FileSystemObjectオブジェクト - FolderExistsメソッド
あと、ステップインで実行しながら、
ローカルウィンドウで変数にどんな値が入っているか、
確認してください。
オブジェクト型の変数は情報が折りたたまれているので、
変数名の前の「+」をクリックして展開してみてください。
「オブジェクト」というもののイメージがわかるかも知れません。
プロパティ、メソッドの探り方 マクロ記録とF1のHelpを使う