上書き保存してバックアップ(Word VBA、Excel VBA)
2020年12月02日
会社PCの調子が悪く、win10アップデートをクリーンインストールしたら復活。
エクセルマクロはパーソナルファイルを退避していたけど、
ワードは頭になくて全部飛んでしまった。。。
情報共有としてメールしていた4件は復旧できたのでご紹介。
今回はその第一弾です。
試行錯誤しながら文書作成やプログラミングをやっているとき、
バージョンを管理しながら進めるのが一般的だけど、
名前を付けて保存するのがめんどくさい!
フォルダの中がどんどんふえていくから、ファイル整理もしなきゃいけない。
てな悩みを解決するために作ったマクロです。
仕様
ワード版とエクセル版があり、それぞれCtrl+Shift+Sで発動するように設定。
以下、ソース
エクセルマクロはパーソナルファイルを退避していたけど、
ワードは頭になくて全部飛んでしまった。。。
情報共有としてメールしていた4件は復旧できたのでご紹介。
今回はその第一弾です。
試行錯誤しながら文書作成やプログラミングをやっているとき、
バージョンを管理しながら進めるのが一般的だけど、
名前を付けて保存するのがめんどくさい!
フォルダの中がどんどんふえていくから、ファイル整理もしなきゃいけない。
てな悩みを解決するために作ったマクロです。
仕様
- INPUTBOXを表示して、更新内容を入力
- バックアップフォルダがなければ作る
- 現在のファイルの保存前の状態をバックアップフォルダに保存
- 上書き保存
- 上書き後の状態をバックアップフォルダに更新内容を追記して保存
ワード版とエクセル版があり、それぞれCtrl+Shift+Sで発動するように設定。
以下、ソース
【ワード版】
【エクセル版】
※ ActiveDocumentをActiveWorkbookに置換しただけです
ショートカットの登録方法
【ワード】
【エクセル】
Sub ◆上書き保存してバックアップv10r00()
Dim バックアップ名 As String, ファイル名 As String, dEXT As String, pos As Long, BKUPpath As String, rc As Long, Savedate As Double
BKUPpath = ActiveDocument.Path & "\BKUP"
Dim Note As String
Note = InputBox("ファイル名に記載する更新内容を入力してください。", "更新内容は?")
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
If FSO.FolderExists(BKUPpath) Then
Else ' "フォルダが存在しない場合は作る"
FSO.CreateFolder BKUPpath
End If
Application.StatusBar = "バックアップ中"
ファイル名 = ActiveDocument.Name
pos = InStrRev(ファイル名, ".") '後方検索でHIT位置を返す 前方はInStr 関数
dEXT = Right(ファイル名, Len(ファイル名) - pos + 1) ' ピリオド付拡張子
Savedate = FileDateTime(ActiveDocument.FullName)
バックアップ名 = BKUPpath & "\" & Left(ファイル名, Len(ファイル名) - Len(dEXT)) & Format(Savedate, "_yymmdd_hhmm") & "BKUP" & dEXT
FSO.CopyFile ActiveDocument.FullName, バックアップ名 '上書き保存後に
Application.StatusBar = "上書き保存中"
ActiveDocument.Save
Application.StatusBar = "最新バックアップ中"
If Note = "" Then
バックアップ名 = BKUPpath & "\" & Left(ファイル名, Len(ファイル名) - Len(dEXT)) & Format(Now, "_yymmdd_hhmm") & "UPDT" & dEXT
Else
バックアップ名 = BKUPpath & "\" & Left(ファイル名, Len(ファイル名) - Len(dEXT)) & Format(Now, "_yymmdd_hhmm") & "UPDT(" & Note & ")" & dEXT
End If
FSO.CopyFile ActiveDocument.FullName, バックアップ名 '上書き保存後に
Set FSO = Nothing
Application.StatusBar = ""
End Sub
【エクセル版】
※ ActiveDocumentをActiveWorkbookに置換しただけです
Sub ◆上書き保存してバックアップv10r00()
Dim バックアップ名 As String, ファイル名 As String, dEXT As String, pos As Long, BKUPpath As String, rc As Long, Savedate As Double
BKUPpath = ActiveWorkbook.Path & "\BKUP"
Dim Note As String
Note = InputBox("ファイル名に記載する更新内容を入力してください。", "更新内容は?")
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
If FSO.FolderExists(BKUPpath) Then
Else ' "フォルダが存在しない場合は作る"
FSO.CreateFolder BKUPpath
End If
Application.StatusBar = "バックアップ中"
ファイル名 = ActiveWorkbook.Name
pos = InStrRev(ファイル名, ".") '後方検索でHIT位置を返す 前方はInStr 関数
dEXT = Right(ファイル名, Len(ファイル名) - pos + 1) ' ピリオド付拡張子
Savedate = FileDateTime(ActiveWorkbook.FullName)
バックアップ名 = BKUPpath & "\" & Left(ファイル名, Len(ファイル名) - Len(dEXT)) & Format(Savedate, "_yymmdd_hhmm") & "BKUP" & dEXT
FSO.CopyFile ActiveWorkbook.FullName, バックアップ名 '上書き保存後に
Application.StatusBar = "上書き保存中"
ActiveWorkbook.Save
Application.StatusBar = "最新バックアップ中"
If Note = "" Then
バックアップ名 = BKUPpath & "\" & Left(ファイル名, Len(ファイル名) - Len(dEXT)) & Format(Now, "_yymmdd_hhmm") & "UPDT" & dEXT
Else
バックアップ名 = BKUPpath & "\" & Left(ファイル名, Len(ファイル名) - Len(dEXT)) & Format(Now, "_yymmdd_hhmm") & "UPDT(" & Note & ")" & dEXT
End If
FSO.CopyFile ActiveWorkbook.FullName, バックアップ名 '上書き保存後に
Set FSO = Nothing
Application.StatusBar = ""
End Sub
ショートカットの登録方法
【ワード】
【エクセル】
- Alt+F8でマクロを表示
- 該当のマクロを選択してオプションをクリック
- 割り当てるキーを設定
PR
Comment