« 文字コードを調べる | トップページ | ゆる~いリアルタイム為替レートのリソース »

2010年4月 6日 (火)

ファイル保存時に自動でコピーを作って保存

手動でエクセルのブックを保存する時に
自動でコピーを作って保存します。

何のためにコピーを作るかというと
バックアップの為です。

VBAを使っていると予期せぬ時に
Excelが強制終了してしまうことがしばしばあります。
しかも、そのファイルを開こうとすると
すぐに強制終了して開けなくなることもあります。

あと、マクロを改良していて
前の方がよかったなんて時のために、
保存のたびにその状態のファイルのコピーを残しておきます。

今のパソコンはハードディスクの容量が大きくなったので
Excelのファイルが多少余分にあっても
大した量ではないのでこまめに保存しても問題ないと思います。

消すのはいつでもできます。

方法は、WorkbookのイベントBeforeSaveを使って
ブックを保存する時に、同時にコピーも保存します。

まず、ファイルを名前を付けて保存します。
ここでは、ファイル名を「Book.xls」にします。

「Book.xls」自体は上書き保存する時のファイル名は、常に「Book.xls」です。
コピーのファイルは保存時の日時を付加して名前を付けます。

保存時が2010年4月6日の21:30:21なら
コピーのファイル名を「Book20100406_213021.xls」になるようにします。

WorkBookのイベントを使う具体的な説明をします。
VBEのプロジェクトウィンドウの「ThisWorkbook」のところを
ダブルクリックしてワークブックのモジュールを表示させます。
Vba20100406a

次に「(General)」のところを「WorkBook」を選択します。
Vba20100406b

その隣「(Declarations)」のところを「BeforeSave」にします。
Vba20100406c

以上の操作でこのようになります。
Vba20100406d_2

上の画像の「Private Sub Workbook_BeforeSave…」から
「End Sub」の間にファイルを保存する前に実行するコードを書きます。

コードはこちら

自動でコピーを作って保存するコード:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim wb As String
    '基本の名前をActiveWorkbookの拡張子を除いたものにする
    wb = Replace(ActiveWorkbook.Name, ".xls", "")
    'コピーを保存
    ActiveWorkbook.SaveCopyAs _
        ActiveWorkbook.Path & "\" & wb & _
        Format(Now(), "yyyymmdd_hhmmss") & ".xls"
End Sub

保存するとこのように日時を付加した名前のファイルも保存されます。

Vba20100406e

|

« 文字コードを調べる | トップページ | ゆる~いリアルタイム為替レートのリソース »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: ファイル保存時に自動でコピーを作って保存:

« 文字コードを調べる | トップページ | ゆる~いリアルタイム為替レートのリソース »