アプリ版:「スタンプのみでお礼する」機能のリリースについて

現在開いているエクセルのファイルにマクロを記述し、
1 「処理済」というフォルダーに、開いているエクセルファイルを移動して、同じ名前でエクセルを保存する。
2 「CSV」というフォルダーに、開いているエクセルファイルをCSVファイルに変換して名前を「処理.csv」とし保存する。
3 現在開いているエクセルファイルは削除する。
以上の三つの処理をさせようと、以下のようにしましたが、1,2の処理は出来ましたが、3の開いているエクセルファイルが残ってしまいます。
以上三つの処理が一度に出来るマクロの記述を教えて下さい。
よろしくお願いします

Sub マクロ()
ActiveWorkbook.SaveAs Filename:="C:\処理済\" & ActiveWorkbook.Name
ChDir"C:\CSV"
ActiveWorkbook.SaveAs Filename:= "C:\CSV\処理.csv" _
, FileFormat:=xlCSV, CreateBackup:=False
Application.DisplayAlerts = False
If Workbooks.Count = 1 Then
Application.Quit
Else
ActiveWorkbook.Close
End If
Application.DisplayAlerts = False
End Sub

A 回答 (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 にファイルが保存されオリジナルは削除されています。
    • good
    • 0
この回答へのお礼

ありがとうございます。
一度閉じることはしたくないので、一つのマクロで処理したいのですが、良い方法はないでしょうか?

お礼日時:2012/06/23 17:30

ANo4について


話の流れで書いてしまったので、回答書いたときは気づいていませんでしたが、
・・・結局ANo2の方の回答そのままのような。。。
(quitしなければ閉じないので同じ結果と思う。)

で、これでまずいのは何でしょう?
    • good
    • 0
この回答へのお礼

Ano.2の方法でできました。
有難うございました。

お礼日時:2012/06/25 13:28

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
    • good
    • 0
この回答へのお礼

Ano.2の方法でできました。
有難うございました。

お礼日時:2012/06/25 13:29

何のために何をしたいのか良く分からない部分があります・・。



新規ファイルを一度も保存していない場合は
ディスク上にファイルが存在しません。
Excel上では仮の名前でBook1にはなっていますけどね。
なので、前回回答の、Kill orgBK はエラーになりますし
そもそも存在しないので削除の必要もありません。
ですので、ファイルを適当な名前で保存して・・と回答した次第です。

既にディスク上にあるファイルを開いて
前回回答のコードを標準モジュールにコピペして即座に実行した場合は
エラーにはなりません。
ただ、この場合はマクロ付きで保存されてしまいますので
>現在開いているエクセルのファイルにマクロを記述
ではなくて
個人用マクロブックを作成して使用すれば
http://detail.chiebukuro.yahoo.co.jp/qa/question …
↑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 さんが回答されていますね。
    • good
    • 0
この回答へのお礼

Ano.2の方法でできました。
有難うございました。

お礼日時:2012/06/25 13:29

>現在開いているエクセルのファイルにマクロを記述し、


>・・・
>3 現在開いているエクセルファイルは削除する。

実行しているマクロが登録されているExcelファイルを削除しようと考えていませんか?
無理です。
開いているExcelファイルは排他使用されていますので、削除できませんし、
実行しているマクロのあるファイルを閉じるとマクロが終了して続きが処理できません。
(閉じて削除するという処理もできません。)

書かれているやりたいことをするためには、普通、
実行するマクロだけを格納した別のExcelファイルを用意して、
そのExcelファイルから、目的のExcelファイルを開いて処理して、閉じてから削除する
方法をとります。
    • good
    • 0
この回答へのお礼

ありがとうございました。
開いているファイルが現在あるフォルダーからなくなればいいので、ファイルを処理済ファイルに移動して、そこで閉じて保存してもよいのですが、そのようなことは出来ますか?

お礼日時:2012/06/23 17:28

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