質問内容を整理しますと
Aというフォルダ内に勤務表雛形のブックAがあり、シートaにボタンを作成
ボタンをクリックすることで、Bと言うフォルダに名前を付けてほぞんする
という内容でよろしいでしょうか
まず「名前をつけて保存」を自動化とあります。
原本であるAのファイル名をそのまま使用すると、翌月には既にあるファイルを上書きしてしまいます。
つまりファイル名は自動生成しなければなりません。
特にこういったファイル名という指定がありませんので、勤務表YYYY-MM分.XLSというふうに日付を使用することにします。
ここではBフォルダをC:\Bとしておきます。
原本のシートを開きマクロを実行させるためのボタンを作成します。
表示メニューからツールバー - コントロールツールボックスを選択
コマンドボタンをシートの適当な空き領域に作成
作成したボタン上で右クリック、メニューからプロパティを選択
ボタンに表示されているテキストをCaptionの項目で変更(内容は適当に)
再度ボタン上で右クリック、コードの表示を選択
表示されたPrivate Sub CommandButton1_Click() ~ End Subの間に下のソースをコピー
表示されているVisualBasicEditorを閉じ、コントロールツールボックスの
オレンジ色になっている、デザインモードの終了をクリックします
ソースはファイル名を上記の通り生成してC:\Bフォルダにほぞんするものです。
マクロを実行した時点の日付が2008/6であればファイル名は
勤務表2008-06.XLS
となります。
途中ファイルを確認変更するための窓を表示しますが、不要であれば'====~'====の部分を削除してもかまいません。
Dim FileName As String
Dim FileExt As String
FileName = "勤務表" & Format(Now, "yyyy-mm") & ".XLS"
'====
FileName = InputBox(FileName & "と言う名前で保存します" & vbCr & "よろしければこのままOKをクリックしてください", "保存ファイル名の確認", FileName)
If FileName = "" Then
Exit Sub
Else
If Right(FileName, 4) <> ".XLS" Then
MsgBox "ファイル名が異常です。"
Exit Sub
End If
End If
'====
FileName = "C:\B\" & FileName
If Dir(FileName) <> "" Then
'##ファイルが既に存在する
If MsgBox("既に指定のファイルが存在します。 上書きしますか?", vbOKCancel, "上書きの確認") = vbCancel Then
'##保存せずに終了
Exit Sub
ElseIf ThisWorkbook.FullName = FileName Then
'##現在開いているファイルと同じなら上書き保存
ThisWorkbook.Save
Else
'##指定ファイルを削除した後保存
Kill FileName
ThisWorkbook.SaveCopyAs FileName:=FileName
End If
Else
'##ファイルを新規保存
ThisWorkbook.SaveCopyAs FileName:=FileName
End If
ThisWorkbook.Saved = True
お礼
本当にありがとうございます。 直ぐに出来る事が出来ました。 ちなみに BフォルダをC:\B で勿論できるのですが、Bフォルダにまとめやすくする為に 保存フォルダを作成 記述にC:\B\保存と指定しましたが Bフォルダにしかコピー出来ません。 どうしてなんでしょうか?