アプリ版:「スタンプのみでお礼する」機能のリリースについて

Excelを使って

(1)セルA1に入れた名目をシート名にし
(2)セルH1には、最終更新日を自動で入れたいです。

調べた結果、
シート名を右クリックして「コードの表示」から

(1)は
Private Sub Worksheet_Change(ByVal Target As Range)
Sheets(1).Name = Range("B1")
End Sub
を入れてうまくいきましたが、

(2)は
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
 If ThisWorkbook.Saved = False Then
  Worksheets("Sheet1").Range("H1").Value = Date
 End If
End Sub
を入れてみましたが(←調べましたもの)
うまくいきませんでした。

単純に、
Private Sub Worksheet_Change(ByVal Target As Range)
Sheets(1).Name = Range("B1")
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
 If ThisWorkbook.Saved = False Then
  Worksheets("Sheet1").Range("H1").Value = Date
 End If
End Sub
とつなげて入れるのではだめなんでしょうか?
それとも、(2)の何かが間違っていますか?


ご教授願います。

A 回答 (4件)

Workbook_BeforeSaveは「ThisWorkbook」に記述してみて下さい。



の意味がおわかりになられていないようなので、以下の画像をよくご覧になって下さい。

「Workbook_BeforeSave」のコードは、プロジェクトエクスプローラのThisWorkbookをダブルクリックの上、記述します。

「Worksheet_Change」については、その場所でOKです。
「Excelでシート名と最終更新日を自動表」の回答画像4

この回答への補足

回答ありがとうございます。

ただ、どうしても解決しません。。。

教えていただいた画面から「ThisWorkbook」をダブルクリックして
新しく開いた画面に
■ ■ ■■ ■ ■■ ■ ■■ ■ ■■ ■ ■■ ■ ■
Private Sub ThisWorkbook(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If ThisWorkbook.Saved = False Then
Worksheets("Sheet1").Range("H1").Value = Date
End If
End Sub
■ ■ ■■ ■ ■■ ■ ■■ ■ ■■ ■ ■■ ■ ■

そして
もともと入れていた画面に
□ □ □□ □ □□ □ □□ □ □□ □ □□ □ □
Private Sub Worksheet_Change(ByVal Target As Range)
Sheets(1).Name = Range("B1")
End Sub
□ □ □□ □ □□ □ □□ □ □□ □ □□ □ □

と入れましたが…、
シート名は相変わらずかわるものの
最終更新日が入りません。。。


コードの中のシート名は、
変更後のシート名(コードで指定したもの)を入れなくてはならないのでしょうか?


つまり、シート名をB1で「りんご」と入れた場合
■ ■ ■■ ■ ■■ ■ ■■ ■ ■■ ■ ■■ ■ ■
Private Sub ThisWorkbook(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If ThisWorkbook.Saved = False Then
Worksheets("りんご").Range("H1").Value = Date
End If
End Sub
■ ■ ■■ ■ ■■ ■ ■■ ■ ■■ ■ ■■ ■ ■
と入れるのでしょうか?
試しにやってみたんですが、変わりませんでしたが。。。

〝ThisWorkbook”も、〝りんご″に変えた方がいいんでしょうか?

補足日時:2011/07/22 22:58
    • good
    • 0
この回答へのお礼

再度自力で調べ、解決しました!

今後このページをご覧になる方へ念のため書き記します。
まず

(1)セルA1に入れた名目をシート名にする
シート名を右クリックして「コードの表示」から
Private Sub Worksheet_Change(ByVal Target As Range)
Sheets(1).Name = Range("A1")
End Sub


(2)セルH1には、最終更新日を自動で入れる
シート名を右クリックして「コードの表示」から
開いたウィンドウの上部にある「挿入」→「標準モジュール」を選びます。
すると標準モジュールが追加されるので、
左側には、


プロジェクト - VBAProject
-■VBAProject(Book1)
 -□MicrosoftExcelObject
 │├Sheet1(Sheet1)
 │├Sheet2(Sheet2)
 │├Sheet3(Sheet3)
 │└ThisWorkbook
 -□標準モジュール
  └Module1


と「標準モジュール」部分が追加されているはずです。



そして、新しく開いたウィンドウの部分に



Public Function LastSaveTime() As Variant
Application.Volatile
LastSaveTime = ThisWorkbook.BuiltinDocumentProperties("Last save time").Value
End Function


をコピペ。


最後に、更新日付を表示させたいセル(今回だとH1)に

=LastSaveTime()



をコピペ。


不思議な数字の配列が表示された場合は
「セルの書式設定」の表示から「日付」で
好みのものを選び(2011/7/23とか)ます。



すると、できました!



教えていただいた
「ThisWorkbook」の操作から解決はできませんでしたが
二度もご回答いただきましたので、
ベストアンサーはkybo さんにしたいと思います!


どうも、ありがとうございました★

お礼日時:2011/07/23 22:24

それぞれのマクロを正しく使用しなければ動きません。

闇雲にコピーしましたでは,ダメです。

1のマクロは次のようにします
http://excelvba.pc-users.net/fol3/3_6.html

2のマクロは次のようにします
http://excelvba.pc-users.net/fol4/4_5.html



別の方法:
シートのマクロは,シート名タブを右クリックしてコードの表示を選んで記述します。
これはご質問で見つけてきたやり方ですね。いわずもがなですが,シートのマクロを効かせたい「正しいシート」に登録しなければ動きません。

ブックのマクロは,ブックをエクセルウィンドウの中で最大化ではない状態にしてから,ブックウィンドウのタイトルの左端のブック名の左隣りのアイコンを右クリックしてコードの表示を選び,現れたシートに記述します。
    • good
    • 0

別サイトの過去の質問ですが


「エクセルの最終更新日自動入力について」
http://detail.chiebukuro.yahoo.co.jp/qa/question …

この回答への補足

回答ありがとうございます。

このサイトは、質問文のコードで試すまでに
既に読んでおりまして

今回もう一度
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range

Set Rng = Range("H1")

On Error GoTo ErrHandler
Application.EnableEvents = False
Rng.Value = Date
ErrHandler:
Application.EnableEvents = True
End Sub

を入力してみましたが
そもそも何もH1には出てきません。
(A1には既にシート名になるものを入れてあり、シート名はA1のものが入っています)


すみません、ド素人なんです。
力技で、質問文の内容までこぎつけたレベルです。。

補足日時:2011/07/14 16:18
    • good
    • 0

Workbook_BeforeSaveは「ThisWorkbook」に記述してみて下さい。

この回答への補足

回答ありがとうございます。

Private Sub Worksheet_Change(ByVal Target As Range)
Sheets(1).Name = Range("B1")
End Sub
Private Sub ThisWorkbook(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If ThisWorkbook.Saved = False Then
Worksheets("Sheet1").Range("H1").Value = Date
End If
End Sub

にして、保存し
一旦閉じてから開いて
適当なセルに入力して保存しても何もでてきませんでした。。。

補足日時:2011/07/14 16:13
    • good
    • 0

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