プロが教えるわが家の防犯対策術!

TODAY関数を使ったとき、前回保存した日付が1/1だったとすると、次に開いたとき日付は1/1から変わらず
保存をすると、日付が今日の日付になるようなことはできますか?
と上記を質問した所、

---------------------
関数ではちと無理っぽいですね。
ではこうしましょう。

1.AltキーとF11キーを一緒に押してください。VBエディター画面となります。
2.画面左側のVBAProjectのThisWorkbookをダブルクリックします。
3.右側の白い部分に下記をコピーして貼り付けます。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Sheets("Sheet1").Range("A1") = Date
End Sub

4.AltキーとF11キーを一緒に押してワークシートに戻ってください。
5.保存してください。これでSheet1のA1に今日の日付が入ります。
6.次に開くときはマクロを有効にして開いてください。
-------------------------------------------------とどなかに教えて頂きました。

更に教えてほしいのですが、上記では数種類のワークシートがあった時にどこかのワークシートで保存をしたらすべてのワークシートに反映して日付がかわってしまいます。開いてるワークシートかつ指定のワークシートのみ保存したら日付が変わるようにできないでしょうか?

A 回答 (2件)

>すべてのワークシートに反映して



Sheets("Sheet1") とシート名を指定しているので、指定したシート以外に反映する事は無いはずです。
それでもすべてに反映しているのなら、他のシートからこの日付を参照しているか、別の関数が入っていることになります。

>指定のワークシートのみ保存

これもエクセルではできません。
保存するならブック単位になるので、特定のシートの変更だけを保存する事はできません。

>開いてるワークシートかつ指定のワークシート

ActiveSheet.Range("A1") = Date で、開いているシートの値を変更して保存できます。

また「指定のワークシート」とは毎回変化するのですか?
それなら毎回何らかの方法でシートを指定しなくてはいけませんが・・・。
    • good
    • 0

一度締めた質問をコピペで再投稿では前に答えた人に失礼ですし、脳内仕様はいつまでも回答者に伝わりませんよ。



ようするに編集日を残したいなら Thisworkbook に

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim r As Range
 For Each r In Target
   If r.Column = 2 Then Sh.Range("A1").Value = Now
 Next r
End Sub

ってな感じでも良いのでは?
B列に手を加えた日時をA1に入れます。
    • good
    • 0

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