- ベストアンサー
VBEで「名前を付けて保存」する方法
- VBEを使用して「名前を付けて保存」する方法について知りたいです。
- 保存するファイル名を変数とし、保存するディレクトリを指定する方法について教えてください。
- 保存したファイルに読み取りのパスワードを設定し、保存後にファイルを閉じるかどうかのダイアログを表示する方法を教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
簡単な操作かと存じますので、ベタ打ちのコードを呈示するだけではなくて、少し解説させていただきます。 先ず、お示しの条件で [新しいマクロの記録] を取ってみましょう。 ChDir "C:\Program Files" ActiveWorkbook.SaveAs Filename:="C:\Program Files\0423.xls", FileFormat:= _ xlNormal, Password:="0423", WriteResPassword:="", ReadOnlyRecommended:= _ False, CreateBackup:=False というコードが得られます。 >ファイル名は変数(4日後の日付をMMDDで。 これは、ワークシートでは =TEXT(TODAY()+4,"MMDD") という式になりますね。 VBA では [TEXT 関数] は [Format 関数] に、[TODAY 関数] は [Date 関数] になりますので、そのまま、 Format(Date + 4, "MMDD") でよいでしょう。 >月を跨いでもきちんと認識されるように Debug.Print Format(Date + 11, "MMDD") を実行すると、イミディエイトウィンドウ に「0430」と表示され、「11」を「12」に変更して実行すると「0501」と表示されます。 問題ありませんね。 ということで、 "C:\Program Files\0423.xls" の部分が "C:\Program Files\" & Format(Date + 4, "MMDD") & ".xls" に、 Password:="0423" の部分は、そのまま Password:=Format(Date + 4, "MMDD") になります。 >保存したらファイルを閉じるかどうかのダイアログを出す。 [MsgBox 関数の使用例] のヘルプをご覧ください。 Dim Response Response = MsgBox("保存しました。ブックを閉じますか?", vbYesNo, "保存後の処理") If Response = vbYes Then ThisWorkbook.Close End If でどうでしょうか? ということで、ベタ打ちのコードは下記のようなことになりますが、既に同名のブックが存在する場合の処理はしておりませんので、別途お考えください。 Sub TEST() Dim MyFolder As String Dim MyDate As String Dim Response As Integer MyFolder = "C:\Program Files" MyDate = Format(Date + 4, "MMDD") ChDir MyFolder ActiveWorkbook.SaveAs Filename:=MyFolder & "\" & MyDate & ".xls", _ Password:=MyDate Response = MsgBox("保存しました。ブックを閉じますか?", vbYesNo, "保存後の処理") If Response = vbYes Then ThisWorkbook.Close End If End Sub なお、要らぬお節介ですが、「C:\Program Files直下」に ユーザーファイル を保存するのはいかがかと存じます。 せめて、ワンクッション置いて MyFolder = "C:\Program Files\hoge" みたいにされる方がよいかと。。。
お礼
ありがとうございます! 素晴らしく役に立ちました。 しかも解説まで付けていただいて、とても分かりやすかったです!