[[20200128235229]] 『For Each f In fso.GetFolderの書式』(みず) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『For Each f In fso.GetFolderの書式』(みず)

こんばんは。

For Each f In fso.GetFolder("D:\VBA検証" & "\data").Files

 With Workbooks.Open(f.Path)
  With .Worksheets(1)
処理
 End With
 End With
Next f

を使ってフォルダー内すべてのファイルを処理をしています。

このフォルダー内の特定のファイルのみ処理する必要があり
With Application.FileDialog(msoFileDialogFilePicker)

  .Show
  strPath = .SelectedItems(1)
End With
End Sub
を使いファイルを選択する様にしたのですが

For Each f In fso.GetFolder("D:\VBA検証" & "\data").Files

 With Workbooks.Open(f.Path)
  With .Worksheets(1)

()の中に"strPath"や".SelectedItems(1)"を入れても
うまく動きません。
どのように変更すれば良いかわかりません。
どなたかご教授願えますでしょうか?

< 使用 Excel:Office365、使用 OS:Windows10 >


>For Each f In fso.GetFolder("D:\VBA検証" & "\data").Files
としていますが、結局対象とするフォルダは何ですか?
strPath = .SelectedItems(1)
で取得したフォルダ?
それとも、"D:\VBA検証" & "\data"?
 
前者なら
For Each f In fso.GetFolder(strPath).Files
ということなのかな。

(γ) 2020/01/29(水) 00:29


お世話になります。
対象とするフォルダは、"D:\VBA検証" & "\data"なんですが、
直接ファイルを選択したくて
ファイルを選択する処理を入れました。
For Each f In fso.GetFolder(strPath).Files と
書き換えてみましたが”パスがありません”となります。

(みず) 2020/01/29(水) 09:11


お世話になります。
”For Each f In fso.GetFolder("D:\VBA検証" & "\data").Files ”を削除して
”With Workbooks.Open(f.Path)”を”With Workbooks.Open(strPath)”としましたら
選択したファイルのみ処理できました。
ありがとうございました。

(みず) 2020/01/29(水) 09:18


あら〜
調べてたら解決済でしたか^^;

なんで、1回選択したのに、わざわざFSOを持ち出すのか不明
For Each f In fso.GetFolder("D:\VBA検証" & "\data").Files
としたら、選択した意味がなくないです?
って、フォルダーを選択するのかな。。。(そっちは試してなかった><)

Option Explicit

Sub test()

    Dim objSelectedItems As FileDialogSelectedItems
    Dim v As Variant

    If GetFullPath(objSelectedItems) = False Then Exit Sub

    For Each v In objSelectedItems
        with Workbooks.Open(v)
           with .Worksheets(1)

        '************
        'ここで何かする
        '************
            Stop

            .Close False
        End with
    Next
End Sub

Function GetFullPath(ByRef fd As FileDialogSelectedItems) As Boolean

    With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = True
        .Filters.Clear
        .Filters.Add "エクセルブック", "*.xls*"
        .InitialFileName = "C:\Users\Guest\test\"

        If .Show Then
            Set fd = .SelectedItems
            GetFullPath = True
        End If
    End With
End Function
(まっつわん) 2020/01/29(水) 09:46

まっつわん様
お世話になります。
FSOとかよくわからないまま
最初は指定したフォルダー内にあるファイルをすべて処理すると
言う事でネットで調べて使ってみました。
使っている内にフォルダを選択するようにしたい、ファイルを直接選択して処理したいなど
出てきたので、継ぎはぎだらけになり
何が必要で、何が不要かしっかり確認しないままになっていました。
教えて頂いたプログラムを自分なりに理解して使わせて頂きます。
ありがとうございました。
(みず) 2020/01/29(水) 10:10

読み違えていまして、失礼しました。
てっきり
Application.FileDialog(msoFileDialogFolderPicker)
を使っているのかと即断してしまいました。

ファイルを指定するのであれば、下記の記事も参考になると思います。

[名前を指定してブックを開く]
http://officetanaka.net/excel/vba/file/file02.htm

(γ) 2020/01/29(水) 12:08


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.