• ベストアンサー

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

質問者が選んだベストアンサー

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.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

e-l
質問者

お礼

有難う御座います。引数で渡すということを今までつかったことがありませんでした。大変勉強になりました。有難う御座います。

その他の回答 (3)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.3

#1です。 動かないとしたら別の部分が間違ってるのでしょう。 これだけのコードだと、#2さんのご指摘のように largept が怪しいです。 デバック-ステップイン-F8キーで、変数に代入された値を確認しながら進めてみては?

e-l
質問者

お礼

誠にすいませんでした。質問がまとまってなかったので#2様の細く部分に再度記述させていただきました。申し訳御座いませんでした。

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

.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

e-l
質問者

補足

すいません、重要なことを記述するのを忘れていました。 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)
回答No.1

ご質問の意図が掴めませんが、、、 If .Execute > 0 Then   C=.FoundFiles.count   For i = 1 to C     ...     処理     ...   Next i こう言う意味ですか?

e-l
質問者

補足

説明が足らず、すいません。質問はその通りです。しかし、プログラムは動きません。宜しくお願いいたします。