- ベストアンサー
VBAで、[.FoundFiles.count]で取得した値の変数Cへの渡し方
VBAで、[.FoundFiles.count]で取得した値を C=.FoundFiles.count(理想) としたいです。そして以下のコードのFor文の.FoundFiles.countをCとしたいのですが、思うようにいきません。その方法を教えて頂きたいのです。宜しくお願い致します。 With Application.FileSearch .LookIn = largept .Filename = "*.txt" If .Execute > 0 Then For i = 1 to .FoundFiles.Count ... 処理 ... Next i Else End If End With
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 プロシージャ内での変数はプロシージャ内でしか有効ではありません。 Sub test1() c = 1 'この c と End Sub Sub test2() MsgBox c 'この c は全然別のもの End Sub 今回の例でどうしても分けたいなら、FoundFilesオブジェクトを引数として渡すとか。 Sub Test() With Application.FileSearch '.LookIn = largept .LookIn = "C:\My Documents" .Filename = "*.txt" If .Execute() > 0 Then Call AAAA(.FoundFiles) Else MsgBox "ファイルはありません" End If End With End Sub '----------------------------------------------- Private Sub AAAA(c As FoundFiles) For i = 1 To c.Count '// 処理 MsgBox c(i) Next i End Sub
その他の回答 (3)
- papayuka
- ベストアンサー率45% (1388/3066)
#1です。 動かないとしたら別の部分が間違ってるのでしょう。 これだけのコードだと、#2さんのご指摘のように largept が怪しいです。 デバック-ステップイン-F8キーで、変数に代入された値を確認しながら進めてみては?
お礼
誠にすいませんでした。質問がまとまってなかったので#2様の細く部分に再度記述させていただきました。申し訳御座いませんでした。
- nishi6
- ベストアンサー率67% (869/1280)
.LookIn には何が設定されているのでしょうか。 例えば、下のようにすると、問題なく動くはずです。 蛇足ですが Option Explicit とし、『変数の宣言を強制する』ようにしてコーディングされているでしょうか。間違いも分かりやすく(発見しやすく)なります。 Sub myFileSearch() Dim i As Integer '// カウンタ Dim c As Integer '// 個数 With Application.FileSearch '.LookIn = largept .LookIn = "C:\My Documents" .Filename = "*.txt" If .Execute() > 0 Then c = .FoundFiles.Count For i = 1 To c '// 処理 MsgBox .FoundFiles(i) Next i Else MsgBox "ファイルはありません" End If End With End Sub
補足
すいません、重要なことを記述するのを忘れていました。 For構文は[Private sub AAAA()]に記述してあり、callで呼び出しています。その上でもう一度質問させてください。このとき、callで呼び出されたAAAAがメッセージボックスでのファイル名の表示をしてくれません。プライベートサブプロージャーでの.FoundFiles(i)の.FoundFilesはメインプロージャーでの作業で(i)はプライベートサブプロージャ内のFor構文に支配されています。では、これをどのようにすればファイル名表示させるようにできるかということです。まだ、うまく言葉にできないですがどうかご教授下さい。 sub ・・・() With Application.FileSearch '.LookIn = largept .LookIn = "C:\My Documents" .Filename = "*.txt" If .Execute() > 0 Then c = .FoundFiles.Count call AAAA For i = 1 To c '// 処理 MsgBox .FoundFiles(i) Next i Else MsgBox "ファイルはありません" End If End With end sub ----------------------------------------------- Private Sub AAAA() For i = 1 To c '// 処理 MsgBox .FoundFiles(i) Next i End Sub
- papayuka
- ベストアンサー率45% (1388/3066)
ご質問の意図が掴めませんが、、、 If .Execute > 0 Then C=.FoundFiles.count For i = 1 to C ... 処理 ... Next i こう言う意味ですか?
補足
説明が足らず、すいません。質問はその通りです。しかし、プログラムは動きません。宜しくお願いいたします。
お礼
有難う御座います。引数で渡すということを今までつかったことがありませんでした。大変勉強になりました。有難う御座います。