プロが教える店舗&オフィスのセキュリティ対策術

表題のとおりですが、
例えばsheet1,sheet2,sheet3とあり、ファイルを閉じるときにsheet3のみ強制的に上書き保存をして終了させたいのです。閉じるときに「変更を保存しますか?」というメッセージが出てきて、保存しないをクリックしてもsheet3だけは保存されているような設定は可能でしょうか?
なぜこのような設定がしたいのかと言うと、作業しているsheet上で誤った入力などがなかったか記録したいのです。この記録するプログラムはネット上で見つけたのですが(下記に示します)、記録されていくシートだけを上書き保存したいと思っています。単純に上書き保存すれば残る話しですが、作業しているシートはフォームが決まっているので変更(上書き保存)を許したくありません。
それか、この記録したシートだけを別のファイルで保存していく方法でも構いません。但し、あくまで自動上書き保存が前提です。どうか宜しくお願い致します。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim X As Integer, Y As Integer
Dim LastRow As Long
X = Target.Column
Y = Target.Row
If Worksheets("Sheet2").Range("A" & Rows.Count).End(xlUp).Row = Rows.Count Then
Exit Sub
End If
LastRow = Worksheets("Sheet2").Range("A" & Rows.Count).End(xlUp).Row + 1
Worksheets("Sheet2").Range("A" & LastRow) = DateValue(Now())
Worksheets("Sheet2").Range("B" & LastRow) = Target.Address(Y, X)
Worksheets("Sheet2").Range("C" & LastRow) = Cells(Y, X)
End Sub

質問者からの補足コメント

  • ご回答有り難う御座います。まさにこの形を理想としていました。
    あと2点質問させて下さい。
    1.エクセルを終了させた時にシートは閉じられるのですが、エクセル自体は残ってしまうのでエクセルごと終了させることはできるのでしょうか?
    2.Sheet3の記録が別ファイルにコピーされる設定のまま、Sheet3も上書きしないことはできるのでしょうか?(記録がどんどん溜まってしまうので)
    宜しくお願い致します。

    No.1の回答に寄せられた補足コメントです。 補足日時:2016/01/14 11:42

A 回答 (1件)

誤解しているかもしれませんが、シート1やシート2、シート3に入力したり、修正した作業を、そのシート名とアドレス、最終的な内容をすべてシート3に一覧になるように記録し、BOOKを閉じるときに、シート3だけを保存するということでしょうか。


そうだとすると、
シート毎に次のコードを入れておく
《Sheet1》の場合
Private Sub Worksheet_Change(ByVal Target As Range)
Dim LastRow As Long
Application.EnableEvents = False
LastRow = Worksheets("Sheet3").Range("A50000").End(xlUp).Row + 1
Worksheets("Sheet3").Range("A" & LastRow) = Time
Worksheets("Sheet3").Range("B" & LastRow) = Target.Address(xlA1)
Worksheets("Sheet3").Range("C" & LastRow) = Target.Value
Worksheets("Sheet3").Range("D" & LastRow) = "Sheet1"  
’(シート2の場合は"Sheet1" シート3の場合は"Sheet3")
Application.EnableEvents = True
End Sub

ThisBOOKに次のコードを入れておく
Private Sub Workbook_BeforeClose(Cancel As Boolean)

Application.Calculation = xlCalculationManual
Dim myname As String
myname = ThisWorkbook.Name
Dim xSheet As Worksheet
Set xSheet = ThisWorkbook.Worksheets("Sheet3")
mejirusi = Format(Now(), "ddhhnnssss")
xSheet.Range("C1") = mejirusi
myFileName = "sheet_copy_" & mejirusi & ".xlsx"
xSheet.Copy
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & myFileName
MsgBox "Sheet3を " & "sheet_copy_" & mejirusi & ".xlsx と保存しました"
If ActiveWorkbook.Name = myFileName Then
ActiveWorkbook.Close SaveChanges:=False
End If
Application.DisplayAlerts = False
Workbooks(myname).Close SaveChanges:=False
End Sub

そうすると、このブックを保存してあったフォルダに、(このブックを閉じると)Sheet3だけが、保存されます。
「エクセルで特定のシートのみ自動上書き保存」の回答画像1
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとうございました。追記事項も自己解決しました。

お礼日時:2016/01/15 10:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています