- ベストアンサー
エクセルマクロでフォルダーの移動と削除
- エクセルマクロを使用して、開いているエクセルファイルをフォルダーに移動し、同じ名前で保存します。
- また、エクセルファイルをCSVファイルに変換し、名前を「処理.csv」として保存します。
- 最後に、開いているエクセルファイルを削除します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
Excel2010では下記のような感じで出来ます。 それ以外のバージョンでも雰囲気はつかめるかと。 標準モジュールに Sub killTest() Dim orgBK As String orgBK = ThisWorkbook.FullName ThisWorkbook.SaveAs "e:\tmp\newBook.xlsm" ThisWorkbook.SaveAs "e:\tmp\newCSV.csv", xlCSV Kill orgBK Application.DisplayAlerts = False Application.Quit End Sub ファイルを適当な名前で保存。 再度開いて、killTest を実行。 上記の場合ではE:\tmp にファイルが保存されオリジナルは削除されています。
その他の回答 (4)
- Siegrune
- ベストアンサー率35% (316/895)
ANo4について 話の流れで書いてしまったので、回答書いたときは気づいていませんでしたが、 ・・・結局ANo2の方の回答そのままのような。。。 (quitしなければ閉じないので同じ結果と思う。) で、これでまずいのは何でしょう?
お礼
Ano.2の方法でできました。 有難うございました。
- Siegrune
- ベストアンサー率35% (316/895)
ANo1ですが。 訂正。 できました・・・。 ただし 1 「処理済」というフォルダーに、開いているエクセルファイルを移動して、同じ名前でエクセルを保存する。 2 「CSV」というフォルダーに、開いているエクセルファイルをCSVファイルに変換して名前を「処理.csv」とし保存する。 3 現在開いているエクセルファイルは削除する。 の処理は変更します。 1 開いているエクセルファイルを「処理済」というフォルダーに、名前をつけて保存する。 (xlsで。) ⇒これで、元のファイルの排他制御が解除される。 2 「CSV」というフォルダーに、開いているエクセルファイルをCSVファイルに変換して名前を 「処理.csv」とし保存する。 ・・・これは影響しない。 3 元のエクセルファイルは削除する。 ・・・開いているエクセルファイルではないことに注意! ★できたプログラム(保存と削除だけですけど) C:\temp\test111.xls というファイルにボタンを作って処理してます。 Private Sub CommandButton1_Click() Dim OLDNAME As String OLDNAME = ActiveWorkbook.FullName ChDir "C:\temp\済" ActiveWorkbook.SaveAs Filename:="C:\temp\済\TEST111.xls", FileFormat:= _ xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _ , CreateBackup:=False Kill OLDNAME End Sub
お礼
Ano.2の方法でできました。 有難うございました。
- nicotinism
- ベストアンサー率70% (1019/1452)
何のために何をしたいのか良く分からない部分があります・・。 新規ファイルを一度も保存していない場合は ディスク上にファイルが存在しません。 Excel上では仮の名前でBook1にはなっていますけどね。 なので、前回回答の、Kill orgBK はエラーになりますし そもそも存在しないので削除の必要もありません。 ですので、ファイルを適当な名前で保存して・・と回答した次第です。 既にディスク上にあるファイルを開いて 前回回答のコードを標準モジュールにコピペして即座に実行した場合は エラーにはなりません。 ただ、この場合はマクロ付きで保存されてしまいますので >現在開いているエクセルのファイルにマクロを記述 ではなくて 個人用マクロブックを作成して使用すれば http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1478105659 ↑2010の場合 Sub killTest() Dim trgBKName As String, trgBKFullName As String trgBKName = ActiveWorkbook.Name trgBKFullName = ActiveWorkbook.FullName If MsgBox(trgBKName & "ですか?", vbOKCancel) = vbCancel Then Exit Sub End If Workbooks(trgBKName).SaveAs "e:\tmp\" & trgBKName Workbooks(trgBKName).SaveAs "e:\tmp\newCSV.csv", xlCSV Workbooks(trgBKName).Close Kill trgBKFullName Application.DisplayAlerts = False Application.Quit End Sub のような感じで良いのかなと思います。 毎回モジュールにコピペする手間も必要ありませんし。 。。って、Siegrune さんが回答されていますね。
お礼
Ano.2の方法でできました。 有難うございました。
- Siegrune
- ベストアンサー率35% (316/895)
>現在開いているエクセルのファイルにマクロを記述し、 >・・・ >3 現在開いているエクセルファイルは削除する。 実行しているマクロが登録されているExcelファイルを削除しようと考えていませんか? 無理です。 開いているExcelファイルは排他使用されていますので、削除できませんし、 実行しているマクロのあるファイルを閉じるとマクロが終了して続きが処理できません。 (閉じて削除するという処理もできません。) 書かれているやりたいことをするためには、普通、 実行するマクロだけを格納した別のExcelファイルを用意して、 そのExcelファイルから、目的のExcelファイルを開いて処理して、閉じてから削除する 方法をとります。
お礼
ありがとうございました。 開いているファイルが現在あるフォルダーからなくなればいいので、ファイルを処理済ファイルに移動して、そこで閉じて保存してもよいのですが、そのようなことは出来ますか?
お礼
ありがとうございます。 一度閉じることはしたくないので、一つのマクロで処理したいのですが、良い方法はないでしょうか?