- ベストアンサー
【Excel VBA】ファイルをコピーする
Excel2003を使用しています。 FDに一時保存されているデータを保存用データとして、MOへコピーしています。 FileCopy ステートメントというものを参考書で見たので、マクロの勉強がてら、試しにやってみたのですが、エラーが出てしまいました。 Sub 保存用作成() FileCopy "A:\○○.xls","F:\○○.xls" End Sub エラーメッセージは、『書き込めません』と出ていたのですが… よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 FileCopy で絶対だというのなら別ですが、FileSystemObject を使った、以下の方法を試していただけませんか?実際、私の場合は、いつも、起動の際に、以下のようにしてバックアップを取っています。 Sub 保存用作成test() Set objFso = CreateObject("Scripting.FileSystemObject") objFso.Copyfile "A:\○○.xls","F:\○○.xls" Set objFso = Nothing End Sub
その他の回答 (3)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 この種のオブジェクトの名称を、「オートメーション」いうのですが、私が覚えたときよりも、今は、もう少し複雑に、そして難しく、便利になっているようです。(もしかしたら、私自身が、それを深めなかったからかもしれません。)一般プログラム言語とは違う方向にあり、私自身、勉強しなおさないといけない分野のようです。 どうしても、ASP などが関係してくるので、なかなか、手を出しにくい分野ではあります。もし、VBAと重複する部分があれば、VBAを使用するのは当たり前です。だから、FileCopy が使えれば、実行速度が違いますから、そちらを優先します。(闇雲にオートメーションでよいというわけではないのですね。)その兼ね合いが難しいです。 >これは、ファイルのバックアップをとるものなのですか? どうも、最近は、そういうように使われるようですね。言い方を変えると、Excelは、仮想メモリの中で、ワークブックを開いて操作しているのは知っていますね。そうすると、本体のファイルは、保存するまで残っていますから、その本体ファイルを変更しないままに、コピーしているのです。 >一時保存データ(FD)のほうは、更新しないほうがいいのですが、ファイルを閉じるときに保存しないで終了すれば、同じことでしょうか? コピーの際は、 ----------------------------------- 仮想メモリに展開の 「○○.xls」 ----------------------------------- [起動時のまま] "A:\○○.xls" → "F:\○○.xls" ということですから、もしも、A 側が保存しなければ、F側のものと同じ、ということになりますね。 参考: Scripting ランタイム ライブラリ FileSystemObject の概要
- 参考URL:
- http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/script56/html/jsobjfilesystem.asp
お礼
再度のアドバイスありがとうございます。 一時保存データ(FD)は、毎月更新していくデータなので、次回更新するまでは、前回の更新日時のままにしておいたほうが、ファイルを開くときに、わかりやすかったこともあり、更新しないほうがよかったのです。 これからは、データを更新するためにFDを開いたときにだけ、今回教えていただいたマクロを実行するようにすれば、良さそうですね。 丁寧に説明していただき、ありがとうございました。
- bonaron
- ベストアンサー率64% (482/745)
開かれているファイルをコピーしようとしていませんか?
お礼
回答ありがとうございます。 コードを一時保存しているデータ(FD)に書いたので、マクロを実行するときに、そのファイルを開いているので、当然、コピーできないですよね。。。 こういう場合は、マクロの保存先を『個人用マクロブック』に変更すればいいのでしょうか?
- marbin
- ベストアンサー率27% (636/2290)
チェック済みでしたらすみません。 MOの書込みプロテクトが掛かっていませんか?
お礼
アドバイスありがとうございます。 MOの書き込みプロテクトは、かかっていません。
お礼
Wendy02 さん、こんにちは。 アドバイスありがとうございます。 早速、教えていただいた FileSystemObject を使った方法を試してみたところ、うまくいきました。 「FileCopy で絶対だ」ということではなく、たまたま参考書を見ていたときに、手作業でしていることがマクロで処理できるかもしれないと思ったので、質問文にも書きましたが、勉強がてら試しにやってみたのです。 今回教えていただいた FileSystemObject は、私の持っている参考書には載っていなかったのですが、これは、ファイルのバックアップをとるものなのですか? できれば、一時保存データ(FD)のほうは、更新しないほうがいいのですが、ファイルを閉じるときに保存しないで終了すれば、同じことでしょうか?