
表題のとおりですが、
例えば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
No.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だけが、保存されます。

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Excel(エクセル) エクセル 値をコピペした時に、条件付き書式で塗られた背景色もペーストさせる 2 2023/04/05 17:21
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) Sheet「状況」から、分類の年齢別カウント数をSheet「D表」へ転記する下記マクロを作っています 7 2022/12/14 17:57
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
excelのマクロで該当処理できな...
-
Excelマクロのエラーを解決した...
-
【ExcelVBA】全シートのセルの...
-
実行時エラー'1004': WorkSheet...
-
エクセル・マクロ シートの非...
-
Excel チェックボックスにチェ...
-
特定の文字を含むシートだけマ...
-
ユーザーフォームに入力したデ...
-
ExcelVBA:複数の特定のグラフ...
-
IFステートの中にWithステート...
-
エクセルで特定のシートのみ自...
-
セルの値によって、シート見出...
-
ExcelのVBAでのグラフ操作について
-
VBAで指定シート以外の選択
-
ブック名、シート名を他のモジ...
-
VBAを用いて繰り返し自動的...
-
エクセルVBA Ifでシート名が合...
-
シート削除のマクロで「delete...
-
シートが保護されている状態で...
-
エクセルのシート名変更で重複...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelマクロのエラーを解決した...
-
特定の文字を含むシートだけマ...
-
ユーザーフォームに入力したデ...
-
excelのマクロで該当処理できな...
-
【ExcelVBA】全シートのセルの...
-
別のシートから値を取得するとき
-
VBAで指定シート以外の選択
-
実行時エラー'1004': WorkSheet...
-
実行時エラー1004「Select メソ...
-
シートが保護されている状態で...
-
IFステートの中にWithステート...
-
VBA 検索して一致したセル...
-
ブック名、シート名を他のモジ...
-
Worksheet_Changeの内容を標準...
-
XL:BeforeDoubleClickが動かない
-
VBA 存在しないシートを選...
-
Excel VBA リンク先をシート...
-
userFormに貼り付けたLabelを変...
-
ExcelVBA シート名を複数セルか...
-
【Excel VBA】Worksheets().Act...
おすすめ情報
ご回答有り難う御座います。まさにこの形を理想としていました。
あと2点質問させて下さい。
1.エクセルを終了させた時にシートは閉じられるのですが、エクセル自体は残ってしまうのでエクセルごと終了させることはできるのでしょうか?
2.Sheet3の記録が別ファイルにコピーされる設定のまま、Sheet3も上書きしないことはできるのでしょうか?(記録がどんどん溜まってしまうので)
宜しくお願い致します。