プロが教えるわが家の防犯対策術!

フォルダ毎コピーできるマクロを作りたいと思っています。
エクセルのC4セルに「コピー元のフォルダのパス」を
C10セルに「コピー先のフォルダのパス」を入れて、
マクロを実行するだけの仕様にしたいです。

その際、例えば
C4には[C:\Users\tanaka\Documents\data]
C10には[\\192.168.1.10\backup]

とした場合、
コピー元の「data」フォルダまるごと
コピー先の「backup」フォルダの中にコピーしたいのですが、
世代バックアップが取れるように
「data_20190718_1110」のように日時を付与したフォルダ名で保存したいのです。

上記のとおりC4、C10を取得するだけでできるのか、
C4にPath[C:\Users\tanaka\Documents\]、C5にフォルダ名[data]と分けて入れるべきなのか、
Pathの末尾に\は必要なのか、
フォルダ内のサブフォルダも含め「全て」対象としたいのですが、
どの辺までコントロール可能なのか、
とか不明点だらけです。

良い方法を教えていただけないでしょうか?

A 回答 (3件)

FileSystemObjectを使用すれば可能なようです。


Folderオブジェクト - Copyメソッド
http://officetanaka.net/excel/vba/filesystemobje …
FileSystemObjectオブジェクト - CopyFolderメソッド
http://officetanaka.net/excel/vba/filesystemobje …
等が参考になると思います。

>上記のとおりC4、C10を取得するだけでできるのか、
>C4にPath[C:\Users\tanaka\Documents\]、C5にフォルダ名[data]と分けて入れるべきなのか・・・
いかようにもなります。
後は変更のしやすさです。極端な話をすればPathを変更する必要が無ければ
FSO.GetFolder("C:\Users\tanaka\Documents\data").Copy "\\192.168.1.10\backupフォルダー名"
のようにするだけで、あえてセルへ入力する必要すらないのです。
※backupフォルダー名に関しては毎回、NowとFormat関数を用いて文字列を作成するようにしないと、要望の「世代バックアップ」には対応できませんが!
    • good
    • 0
この回答へのお礼

ありがとうございます。
教えていただいたリンク先の情報を参考にして、
指定したフォルダ丸ごと、指定先のフォルダ内にコピーさせることができました。

[TEST] → \Backup\TEST としてコピーできたという事です。

これを
\Backup\TEST_20190710_1454 の様にコピーしたいのですがどうしたら良いでしょうか?

ちなみに現状は、日時は自動取得しており、
DstFolderName という変数に「TEST_20190710_1454」という名称で格納は出来てます。
DstPath という変数に「\\192.168.1.10\backup」も取得できてます。

\\192.168.1.10\backup\TEST_20190710_1454 としてコピーしたく、
お知恵をお貸しください。

お礼日時:2019/07/18 15:24

>DstFolderName という変数に「TEST_20190710_1454」という名称で格納は出来てます。


>DstPath という変数に「\\192.168.1.10\backup」も取得できてます。
まで出来ているのでしたら、それらをつなぎ合わせて
「\\192.168.1.10\backup\TEST_20190710_1454」とすればよいはずですので、
DstPath+”¥”+DstFolderName
をコピー先に指定すれば良いので、
FSO.GetFolder("C:\Users\tanaka\Documents\data").Copy DstPath+”¥”+DstFolderName
でコピーできませんでしょうか。
一番の懸念事項は、このCopyメソッドがネットワークPCに対応しているかの方にあります。
先に
FSO.GetFolder("C:\Users\tanaka\Documents\test").Copy ”\\192.168.1.10\backup\TEST_20190710_1454””
等で確認した方が良いように思います。
最後の”¥”の有無等で保存先が変化するようですので、意図したフォルダー名と異なる等の細かい不都合は生じるかもしれません。
    • good
    • 0
この回答へのお礼

ありがとうございます!
また試行錯誤してみます。

結果的には、
目的の名称のフォルダをVBAで自動作成させてから、その中にフォルダ中を放り込む、、、という手法でとりあえずうまく行ってしまいました。
どっちが良いんでしょうね?

お礼日時:2019/07/19 11:56

>これを


>\Backup\TEST_20190710_1454 の様にコピーしたいのですがどうしたら良いでしょうか?

FSO.CopyFolder コピー元, コピー先 ですが
コピー先を \Backup\TEST でなく
\Backup\TEST_20190710_1454 としてください。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!