人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

aaa.xlsというエクセルファイルを開いて
保存ボタンを押したとき、
別名のバックアップが取りたくて
下記のようなマクロを設定しています。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Dim FName As String

fol = "c:\作業中"
FName = fol & "\" & "bbb.xls"

Application.DisplayAlerts = False
ActiveWorkbook.SaveAs FName, CreateBackup:=True
Application.DisplayAlerts = True

End Sub


ただ、上記マクロだと保存ボタンを押した後に
ファイル自体がbbb.xlsとなってしまいます。

aaa.xlsのままで作業を継続したいのですが可能でしょうか?

※保存ボタンをおしたときにバックアップを作成するようなイメージです。
※aaa.xlsは毎回ファイル名、保存してある場所が変更されます。


どうぞよろしくお願いいたします。


●質問者: ohtsu6
●カテゴリ:コンピュータ
✍キーワード:AAA application as String sub
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● きゃづみぃ
●35ポイント

aaa.xlsをコピーして bbb.xlsにしてやればよい。

FileCopy ThisWorkbook.FullName, FName

といった感じで。

◎質問者からの返答

ありがとうございます。


2 ● Mook
●1000ポイント ベストアンサー

逆の発想ですが、保存してからコピーでどうでしょうか。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'// 一旦自分自身を保存
 Application.EnableEvents = False
 ThisWorkbook.Save
 Application.EnableEvents = True
 
'// バックファイルをコピー
 Const backupPath = "D:\Work\bbb.xls"
 
 With CreateObject("Scripting.FileSystemObject")
 .CopyFile ThisWorkbook.Path & "\" & ThisWorkbook.Name, backupPath, True
 End With
 Cancel = True
End Sub

蛇足ですが、

 Const backupPath = "D:\Work\bbb.xls"

の部分を下記のようにすれば、保存ごとに時間情報をファイル名にして保存していきます。

 Dim backupPath As String
 backupPath = "D:\Work\bbb_" & Application.Text(Now(), "YYYYMMDD_HHMMSS") & ".xls"

でも1世代前だけあればよいのであれば、不要ですね。

◎質問者からの返答

ありがとうございます。

下記を利用させていただきます。

Dim backupPath As String

backupPath = "D:\Work\bbb_" & Application.Text(Now(), "YYYYMMDD_HHMMSS") & ".xls"

ちなみにですが、

Private Sub Workbook_BeforePrint(Cancel As Boolean)や

Private Sub Workbook_BeforeClose(Cancel As Boolean)では

実行できませんでした。

プリントのほうでも実行されるようにしたいのですが可能でしょうか?

どうぞよろしくお願いいたします。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ