• ベストアンサー

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

  • e-l
  • お礼率45% (158/349)

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

  • ベストアンサー
  • 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
質問者

補足

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

関連するQ&A

  • 【ファイルサーチ】指定のフォルダーではなく自分で選択したフォルダー内のファイルの総数をカウントしたい

    お世話になります。指定のフォルダーではなく自分で選択したフォルダー内の"csvファイル"の総数をカウントしたいのですがうまくいきません。アドバイスお願いいたします。 With Application.FileSearch .LookIn = Application.GetOpenFilename .Filename = "*.csv" If .Execute > 0 Then MsgBox .FoundFiles.Count & "個" End If For i = 1 To .FoundFiles.Count MsgBox .FoundFiles(i) Next i End With

  • VBAのFileSearchでFoundFiles(i)の作成日時を取得したい

    タイトルどおりですが、Fileオブジェクトには DateCreatedプロパティーがあるようですが、 どこでこれを使用していいのかわかりません。 したのはHELPのサンプルですが、どうしたらいい ものでしょうか? With Application.FileSearch If .Execute() > 0 Then MsgBox .FoundFiles.Count & _" 個のファイルが見つかりました。" For i = 1 To .FoundFiles.Count Debug.Print .FoundFiles(i) Next i Else MsgBox "検索条件を満たすファイルはありません。" End If End With

  • FileSearchがエクセル2007で使えなくなって困っています。

    2003では普通に使えたのですが、2007で使うためにはどのように変えればいいのでしょうか?途方にくれているのでVBAに詳しい方ご教授ください。処理文で回答頂けるとうれしいです。 Public Sub p_更新() For i = 1 To 100: gwKillFL(i) = "": Next i With Application.FileSearch .LookIn = gAAFLD .SearchSubFolders = True .Filename = "*T" & Format(gBB, "00") & ".txt" .FileType = msoFileTypeAllFiles If .Execute(SortBy:=msoSortByFileName, _ SortOrder:=msoSortOrderAscending) > 0 Then For i = 1 To .FoundFiles.Count gwKillFL(i) = .FoundFiles(i) Call p_ReadData(.FoundFiles(i)) Next i For i = 1 To .FoundFiles.Count If gwKillFL(i) <> "" Then Kill gwKillFL(i) End If Next i If gMenu1 > 0 Then Range("A2").Select MsgBox "更新", vbOKOnly, "確認" End If Else If gMenu1 > 0 Then MsgBox "更新ファイルなし。", vbOKOnly, "確認" End If End If End With End Sub

  • Visual Basic Editorの実行時エラーのことについて教えてください。 

    Visual Basic超初心者ですがよろしくお願いします。 標準モジュールで入力したものを実行すると、必ず「実行時エラー "53": ファイルが見つかりません。」と表示してしまいます。 入力したものはミスはないと思うのですが、何回やってもエラーが出てしまいます。 わかる方いましたら教えてください。 入力したものを一応載せときます↓ Sub list_file() Dim numfile As Long Dim i As Long With Application.FileSearch .NewSearch .LookIn = Range("b1").Value .Filename = Range("b2").Value .SearchSubFolders = Range("b3").Value If .Execute() > 0 Then file_count = .FoundFiles.Count MsgBox file_count & "files exis" Worksheets.Add after:=Worksheets("sheet1") Range("a1").Value = "filename" Range("b1").Value = "date" Range("c1").Value = "size" For i = 1 To file_count Cells(i + 1, 1).Value = .FoundFiles(i) Cells(i + 1, 2).Value = FileDateTime(.FoundFiles(i)) Cells(i + 1, 3).Value = FileLen(.FoundFiles(i)) Cells(i + 1, 2).Value = Hex(Cells(i + 1, 3).Value) Next Columns("a:c").AutoFit Else MsgBox "no file exists" End If End With End Sub

  • エクセルVBA:取得したファイル情報を別シートに貼るには・・・

    いつもお世話になっています。 今エクセルVBAで指定したフォルダ内のファイル情報を取得し、sheet2に貼り付けるものを作っています。 指定したフォルダ内のファイル情報を取得するまでは分かったのですが、作ったVBAを実行するとsheet1のA2セルから自動的に貼り付けられてしまいます。 sheet2のA1セルから貼り付けるにはどうすれば良いのでしょうか?? 作ったVBAはこんな感じです。 まず、フォルダのパスを取得しA2セルへ表示します。 Sub test2()  With Application.FileDialog(msoFileDialogFolderPicker) If .Show = 0 Then Exit Sub Range("A2").Value = .SelectedItems(1) End With End Sub 次に、A2セルの値を使ってファイル名を取得しました。 Sub Test() Dim i As Long Dim pass As String pass = Range("A2").Value With Application.FileSearch .NewSearch .LookIn = pass .FileType = msoFileTypeAllFiles .SearchSubFolders = True If .Execute() > 0 Then For i = 1 To .FoundFiles.Count Cells(i + 1, 1) = .FoundFiles(i) Cells(i + 1, 3) = FileDateTime(.FoundFiles(i)) Next i End If End With End Sub です。 長くて申し訳ありません。よろしくお願いします。

  • 改善コードを教えてください。

    EXCEL2003で作成したマクロが2010で下記のコードが動作しません。 どう修正したらいいか教えてください 。 できれば、具体的なコードを書いていただけると、助かります。 ' With Application.FileSearch ' .NewSearch ' .LookIn = TXP_hozon_saki ' .Filename = ".TXP" ' .SearchSubFolders = True ' ' If .Execute() = 0 Then ' MsgBox "TXPファイルなし", vbOKOnly, "参照ファイルエラー" ' Exit Sub ' End If ' For KensakuSuu = 1 To .FoundFiles.Count ' TXP_hozon_name(1, KensakuSuu) = .FoundFiles(KensakuSuu) ' Next KensakuSuu ' End With 上記コードは、拡張子.TXPというファイルを検索して、動作させるものです。

  • ワイルドカードの記述が、原因でしょうか?

    下記コードが、ついこの前までは、きちんと "A?07??????.CSV" を読み込んでたんですが、 今は、 "検索条件を満たすファイルはありません。"  となってしまいます。 1、ワイルドカードの記述が、おかしいでしょうか? 2、フォルダ名は、漢字等はやめて、半角英数字にしたほうがよいのでしょうか? 3、このような、現象は、よくあることでしょうか? 以上 原因がわかりませんので、何卒ご教示くださいませ。 ----------------- Private Sub TEST() Dim myFS As FileSearch Dim i As Long ChDir "C:\Documents and Settings\Owner\デスクトップ\ああ" Set myFS = Application.FileSearch With myFS .LookIn = "C:\Documents and Settings\Owner\デスクトップ\ああ" .Filename = "A?07??????.CSV" If .Execute > 0 Then For i = 1 To .FoundFiles.Count '見つかったファイルを一つずつ開く Workbooks.OpenText Filename:=.FoundFiles(i), _ StartRow:=1, _ DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, _ Comma:=True 'ああ.xlsブックに移動 Sheets(1).Move after:=Workbooks("ああ.xls").Worksheets(Workbooks("ああ.xls").Sheets.Count) Next i Else MsgBox "検索条件を満たすファイルはありません。" End If End With End Sub

  • 複数のフォルダに、順次実行したいんですが?

    下記コードで(あるサイトにありました)、"C:\DATA"の中の複数のフォルダ(F1、F2、F3、変動あり、いまのところ3つまでです)へ、順次実行したいのですが、うまく出来ません。 Call を使用すれば、出来ますが、Call を使用しないで実行するにはどのように編集すればよろしいですか? 以上よろしくご教示くださいませ。 中部分は、省略しました。 ---------- Sub CSVtoXLS() Dim myFS As FileSearch Dim mySvWb As Workbook Dim i As Long ChDir "C:\DATA" Set myFS = Application.FileSearch With myFS .LookIn = "C:\DATA" .Filename = "*.csv" If .Execute > 0 Then '保存用ブックを追加 Workbooks.Add Set mySvWb = Workbooks(2) For i = 1 To .FoundFiles.Count '見つかったファイルを一つずつ開く        ・        ・     '保存用ブックを保存して閉じる mySvWb.SaveAs Filename:="CSV_hozon" mySvWb.Close Else '検索結果が0なら MsgBox "検索条件を満たすファイルはありません。" End If End With End Sub

  • Excel VBAのFileSearch機能

    初めて投稿します。助けてください。 以下のVBAを使用して業務を行っているのですが このマクロが動かなくなってしまいました。 ネット等で調べてわかったのですが XP問題で社内PCがすべて変わりExcelも2013になってしまい 2013では、下記に記載されているFileSearch機能が使用できないようです。 出来れば下記の分をExcel2013でも 動くようにどの部分を変更すればいいいか教えていただけないでしょうか? ---------------------<VBA文>------------------------- Sub 作成() Dim i, j, no As Integer Dim Mpath, Mname, Mfull As String Mpath = ActiveWorkbook.Path Mname = ActiveWorkbook.Name Mfull = Mpath & "\" & Mname Worksheets("一覧").Select Range("A2:A200").Clear With Application.FileSearch .NewSearch .LookIn = Mpath .Filename = "*.xls" .FileType = msoFileTypeExcelWorkbooks If .Execute > 0 Then For i = 1 To .Execute If .FoundFiles(i) <> Mfull Then Cells(i + 1, 1).Value = .FoundFiles(i) j = Len(Cells(i + 1, 1)) If j > 218 Then MsgBox ("218文字を超えてます。") Exit Sub End If End If Next i Else MsgBox ("見つかりませんでした。") End If End With   Range("A2").Select Range("A2:A1000").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal End Sub

  • Access2007でFile Searchが使えなくなり大変困ってい

    Access2007でFile Searchが使えなくなり大変困っています。 行いたい内容は以下です。 1.ボタンを押下し、指定したフォルダのファイル一覧画面を出す 2.一覧画面のファイル名に直近のファイル名を表示させる ・Access2000(VBA)でのコード Set fs = Application.FileSearch With fs .lookin =Path  'Path=D:¥system¥file .FileName ="*.xls" If Execute() > 0 Then File = foundfiles(.foundfiles.Count) Else File = "" End With ネットで検索すると、FileSystemObjectで対応できるとのことですが、よく分かりません。 File Searchを使わずにFileSystemObjectを使うとどのように書くのでしょうか。 どうぞ宜しくお願いします。

専門家に質問してみよう