Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Excel 2016)
Filesystemobjectの繰り返し処理
投稿日時: 19/10/21 23:51:00
投稿者: mbabuo

 
指定した[テスト]フォルダの中のファイルの中を
配列のように順番に指定して処理したいです
 
 
(例)
 
Dim fso As FileSystemObject
Dim fl As Valiant
Dim fol As Valiant
 
For Each fl in fso.GetFolder(fol.path & "テスト").Files
 
例えばファイルが3つあったとして
それぞれのファイル名前が「結果一覧」「aaa」「bbb」
だった場合、
「aaa」&「結果一覧」の組み合わせ ⇒処理1回目
「bbb」&「結果一覧」の組み合わせ ⇒処理2回目
としたいのですが、2回目の繰り返し処理がうまくいきません
 
配列のように、fl(1)とかできないのはわかったのですが
ではどのようにしたらいいのかがわからず困っています
 
ファイルの数はその時々によって違い
aaaやbbbのファイル名は任意ですが
「結果一覧」というファイルは必ずあります
 

回答
投稿日時: 19/10/22 09:07:15
投稿者: simple

回答が変でしたので、改めて。
 

For Each fl in fso.GetFolder(fol.path & "テスト").Files
    IF fl.Nameが 「結果一覧」 でなければ
         fl.Path と 「結果一覧」を使って処理を行う
    End IF
Next     

といったことでしょうか?

投稿日時: 19/10/22 14:10:58
投稿者: mbabuo

Simpleさん
返信遅くなり申し訳ないです。
また、改めてのご回答をありがとうございます。
 
 
>For Each fl in fso.GetFolder(fol.path & "テスト").Files
>IF fl.Nameが 「結果一覧」 でなければ
>fl.Path と 「結果一覧」を使って処理を行う
>End IF
 
そうです。
 
「結果一覧」以外のファイルが1つなら
うまくいくのですが、2つ以上あった場合
ループしたいのですが、それがfl.pathの指定で
どう回せばいいのかわからないんですね
 
最初に書いた例でいうと、
「aaa」&「結果一覧」の組み合わせ ⇒処理1回目はできる
「bbb」&「結果一覧」の組み合わせ ⇒処理2回目ができない
 
または、
「結果一覧」ファイルとそれ以外の全部のファイルが
一度に処理されたりしています

回答
投稿日時: 19/10/22 15:27:47
投稿者: WinArrow
投稿者のウェブサイトに移動

代案
 
For Each fl in fso.GetFolder(fol.path & "テスト").Files
    Select Case fl.Name
        Case "aaaa"
             「aaaa」と「結果一覧」を使って処理を行う
        Case "bbbb"
             「bbbb」と「結果一覧」を使って処理を行う
    End Select
Next

回答
投稿日時: 19/10/22 18:45:05
投稿者: simple

引用:
「結果一覧」以外のファイルが1つなら
うまくいくのですが、2つ以上あった場合
ループしたいのですが、それがfl.pathの指定で
どう回せばいいのかわからないんですね

結果一覧を予め開いておく前提とします。
  
For Each fl in fso.GetFolder(fol.path & "テスト").Files
   IF fl.Nameが 「結果一覧」 でなければ
       ・fl.Path を開きます
       ・これと「結果一覧」を使って処理を行います
       ・開いたブックを閉じます
   End IF    
Next 
としてはどうでしょうか。
 
これで通じますでしょうか。

投稿日時: 19/10/22 20:45:42
投稿者: mbabuo

Simpleさん、WinArrowさん
 
ご連絡ありがとうございます
なんとなくはわかるのですが
どこを直せばいいのか
はっきりわからずで(;^_^A)すみません
 
コードが手元にないのでうろ覚えですが
ちょっと書かせていただきます
 
 
重複しますが、再度ご説明いたしますと
 
こちらは元はワードやエクセルのものを
PDFに変換した後、同じフォルダ「テスト」に格納後、
PDFで結合させる処理をループする手順なのですが
 
結合したいのは、
<「結果一覧」とそれ以外のファイル>で
それ以外のファイル名はいつも変わります
 
それ以外のファイルは2つあれば、
ファイル1+「結果一覧」
ファイル2+「結果一覧」
 
3つなら
ファイル1+「結果一覧」
ファイル2+「結果一覧」
ファイル3+「結果一覧」
 
です
 
'----フォルダ「結果一覧」のPDFファイルを結合
'----ファイル「結果一覧」とそれ以外のファイルをそれぞれ結合する
 
Dim pdoc As Object
With CreateObject("AcroExch.PDDpc")
 .Create
 Set pdoc = createObject("AcroExch.PDDpc")
 
 
For Each fl In fso.GetFolder(fol.Path & "\テスト").Files
 IF fl.Nameが 「結果一覧」 でなければ
 
 変数aaa = fl.Name '---変数aaa、bbb,ccc,dddはstringです
  変数bbb = fso.GetFile(fol.Path & "\テスト\" & aaa).Path 'それ以外のファイル
  変数ccc = "結果一覧" & ".pdf"
  変数ddd = fso.GetFile(fol.Path & "\テスト\" & ccc).Path ’結果一覧のファイル
 
 If pdoc.Open(bbb)Then
 .InsertPages .GetNumPages() -1,pdoc, 0 , pdoc.GetNumPages() -1, True
 pdoc.Close
End If
 
If pdoc.Open(ddd)Then
 .InsertPages .GetNumPages() -1,pdoc, 0 , pdoc.GetNumPages() -1, True
 pdoc.Close
End If
 
.Save 1 , fol.Path & i & "ALL.pdf" '1=PDSaveFull
.Close
 
i= i +1 ' 変数iはLongです
 
End If
 
Next
 
End With
 
 
少々処理をはしょっていますが
今はこのように書いておりまして
これだと一つ目のファイルしか結合されないので
困っています

回答
投稿日時: 19/10/22 21:56:16
投稿者: simple

すいませんが、何を求めていますか?
コードの添削でしょうか?
 
何をしたいかの説明もまだ無いのに、そりゃ無理です。
それにうろ覚えのものにコメントしても、
あ、それはこうでしたということになり
全くもって無駄です。
また、急にPDFの話になっていますが、
基本的な考え方は以前に説明したとおりです。
 
私はここまでとさせていただきます。

投稿日時: 19/10/22 22:19:30
投稿者: mbabuo

Simpleさん
説明の仕方が悪かったでしょうか。
すみません、不快な思いをさせてしまった
ようでしたらお詫びします。
コメントをありがとうございました。

投稿日時: 19/10/22 22:28:20
投稿者: mbabuo

こちらは以上でとじさせていただきます
コメントをありがとうございました。