Access2000VBA・Excel2000VBA独学~現在開いているファイルを、同じ形式で、かつリネームして(YYYYMMDDHHMMSSをつけて、指定フォルダにバックアップするサンプルプログラム(ファイルの複製・世代バックアップ)~
  
※まだ書きかけです。すみません。
※間違ってたらすみません。
※メモ書きなので、自分でも意味不明な箇所も多いです。ごめんなさい。
  
  
  
まず、マクロの記録機能で、適当なマクロを「個人用マクロブック」に作り、いったんファイルを閉じます。

そうすると、次回の立ち上げ時に、Personal.xlsbというファイルが一緒に、非表示で立ち上がります。
「リボンの開発タブ→VisualBasicボタン」で出てくるVBE(VisualBasicEditor)の画面の左側、「プロジェクトエクスプローラ」にて確認できます。
(過去にすでに何らかのマクロを作ったことがある場合は、Personal.xlsbというファイルがすでにできていると思いますが、念のため、再度、マクロの記録機能で、適当なマクロを作っておきます。そして、いったん閉じて、xlsxファイルを開きます。)

で、Personal.xlsb の標準モジュールに、以降に挙げたコードをコピペします。

あとは、この「BackUpMake_YYYYMMDD_HHMMSS_01()」というこのプログラムを、クイックツールバーの自作ボタンに登録すれば、そのボタンの押下をするだけで、xlsxもxlsmも複製コピーが可能です。

つまり、世代バックアップができます。

  
  

★注意

ActiveWorkbook(現在開いているブック)で「SaveAs」メソッドを使ってしまうと、「現在開いているファイルの内容」が、リネームして世代バックアップしたファイルのほうに置きかわってしまい、「1番最初に開いていたモトのExcelファイル」ではなくなってしまいます。
結果、世代バックアップがちゃんとできません。

また、「ファイル名がまだ決まっていない場合や、xlsやxlsmにも対応したい場合」、のことも考えると、「SaveAs」メソッドだと僕のような初心者にはわかりにくいです。
VBAに詳しい人なら、Workbooksコレクションをうまく使う方法もあるかもしれませんが、僕のような初心者にとっては、トリッキーに感じてしまい、メンテも面倒くさいです。

よって、本サンプルでは、「SaveAs」メソッドを使わずに、「SaveCopyAs 」メソッドを」使っています。

ただ、「現在のモトとなるファイル」と異なるファイル形式の拡張子を指定するとエラーになるので、一応事前に、If文にて、「ActiveWorkbook.FileFormat = xlExcel8 」みたいな感じで「現在のモトファイルがどんなファイル形式なのか?」のチェックをかけてます。(それによって、拡張子も変えています。)

ただこれも、チェックしなくても自由に保存形式を指定できる方法がきっとあると思います。それはご自分でも調べてみてください。
一応、「SaveAs」メソッドの「FileFormat」引数を使うことで実現できるようです。
(保存後に保存先のファイルに入れ替わらない方法が見つかれば尚いいですね!)

参考ページ
保存するフォーマットの指定
【ExcelVBA入門】SaveAsメソッドを使ったファイル保存方法を徹底解説!