Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


14386 / 76734 ←次へ | 前へ→

【67844】Re:画像集約について
発言  kanabun  - 11/1/12(水) 17:22 -

引用なし
パスワード
   ▼初心者 さん:

> 現在の状況は、集めてくるフォルダを探す。
> までの工程で止まっています。

どのようなコードになりましたか?

参考まで、FileSystemObjectを使うと、指定フォルダ直下の
サブフォルダ名を取得するコードは
以下のように簡単に書けます。

(注意)このマクロを走らせる前に、VBEメニュー[ツール]-[参照設定...]
で、
★ Microsoft Scripting Runtimeへの参照設定をしておいてください。
参照設定しなくとも 実行時に
  CreateObject("Scripting.FileSystemObject") と実行時バインディング
すれば同様の処理ができますが、Fsoのもつ豊富なメソッド・プロパティを
簡単に参照するためにも、まずは事前バインディング法をおすすめします。

あと、
> Dim src As String:   src = "E:\(Map2)"
> Dim Dest As String:   Dest = "E:\(MapAll)\"
には コピー元フォルダ名、コピー先フォルダ名をそちらの環境のものに
変更しておいてください。(あ、Destはここでは不要でしたね)

Sub Try1() 'Debug.Print パス表示のみ
 Dim src As String:   src = "E:\(Map2)"
 Dim Dest As String:   Dest = "E:\(MapAll)\"
 Dim FSO As FileSystemObject
 Dim Folder As Folder
  
  Set FSO = New FileSystemObject
  For Each Folder In FSO.GetFolder(src).SubFolders
    Debug.Print Folder.Path 'フォルダパス名を _
           イミディエイト・ウィンドウに表示する
  Next
  Set FSO = Nothing
 
End Sub

イミディエイト・ウィンドウ(Ctrl+[G]で出てくるウィンドウ)に
ちゃんと、サブフォルダ名が表示されましたか?


>ちなみに、コピーで集約しようと思っています。


では、いよいよファイルのコピーに挑戦してみましょう。
以下のプロシージャで先頭の
> Dim SrcPath As String: SrcPath = "E:\(Map2)"
> Dim Dest As String:   Dest = "E:\(MapAll)\"
のところを、そちらの環境のコピー元のパス、コピー先パス名
にそれぞれ変更してください。

★コピー先フォルダはすでに作成されているものとします。
以下の例では 拡張子が*.jpg のファイルのみをコピーしています。

Sub Try2copy() 'ワイルドカード使って <COPYFile> 1階層のみ
 Dim SrcPath As String: SrcPath = "E:\(Map2)"
 Dim Dest As String:   Dest = "E:\(MapAll)\"
 Dim Folder As Folder
 Dim src As String
  
 If Right$(Dest, 1) <> "\" Then Dest = Dest & "\"
 With New FileSystemObject
  For Each Folder In .GetFolder(SrcPath).SubFolders
    src = Folder.Path & "\*.jpg" '拡張子*.jpgファイルのみ
    Debug.Print src, Dest
    On Error Resume Next
     .CopyFile src, Dest
     If Err().Number Then
       Debug.Print , Err().Description
     End If
    On Error GoTo 0
  Next
 End With
End Sub

何らかの理由で Fso.CopyFileメソッドが失敗することがあります。
そのばあいは、イミディエイト・ウィンドウにエラーメッセージが
表示されます。(処理は継続します)
コピー先フォルダ名 Dest の末尾には "\"を付けて、コピー先が
フォルダ名であることを指定しています。

>サブフォルダは、名前は違うので問題はないかとは思います。

ファイル名に重複があると、FileCopy時にエラーになると思います。
4 hits

【67814】画像集約について 初心者 11/1/11(火) 16:49 質問
【67818】Re:画像集約について kanabun 11/1/11(火) 17:35 発言
【67819】Re:画像集約について 初心者 11/1/11(火) 17:39 質問
【67824】Re:画像集約について 山猿 11/1/11(火) 21:32 発言
【67834】Re:画像集約について kanabun 11/1/12(水) 13:03 発言
【67843】Re:画像集約について 初心者 11/1/12(水) 16:29 発言
【67844】Re:画像集約について kanabun 11/1/12(水) 17:22 発言

14386 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free