Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6057 / 13645 ツリー ←次へ | 前へ→

【47242】更新日付の自動変更 くやっち 07/3/6(火) 9:30 質問[未読]
【47243】Re:更新日付の自動変更 ぱっせんじゃー 07/3/6(火) 10:02 発言[未読]
【47268】Re:更新日付の自動変更 くやっち 07/3/6(火) 23:31 質問[未読]
【47270】Re:更新日付の自動変更 Kein 07/3/7(水) 1:02 回答[未読]
【47276】Re:更新日付の自動変更 くやっち 07/3/7(水) 8:15 質問[未読]
【47298】Re:更新日付の自動変更 Kein 07/3/7(水) 16:30 回答[未読]
【47452】Re:更新日付の自動変更 くやっち 07/3/10(土) 22:45 お礼[未読]

【47242】更新日付の自動変更
質問  くやっち  - 07/3/6(火) 9:30 -

引用なし
パスワード
   シートの"セルT1"の部分に日付を入れています。
編集後、ブックを閉じる時に「変更を保存しますか?」と聞いてきますが、「Yes」をクリックしたときに、この"T1"を更新した時の日付にしたいのですが、どのようにすれば良いでしょうか?
Range("t1").Value = Date
を使えば良いと言うことは分かりましたが、ブックの変更を保存する時だけこれを実行させると言うのが分かりません。
よろしくお願いいたします。

【47243】Re:更新日付の自動変更
発言  ぱっせんじゃー  - 07/3/6(火) 10:02 -

引用なし
パスワード
   ThisWorkbookモジュールの↓のイベントを使用してはいかがでしょう?

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

End Sub

【47268】Re:更新日付の自動変更
質問  くやっち  - 07/3/6(火) 23:31 -

引用なし
パスワード
   ▼ぱっせんじゃー さん:
>ThisWorkbookモジュールの↓のイベントを使用してはいかがでしょう?
>
>Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
>
>End Sub

ちょっとやってみました。
上記をThisWorkbookに入力し、「日付更新」というモジュールを作成して、

Sub 日付()
Worksheets("Sheet1").Activate
Range("t1").Value = Date
End Sub

を追加したのですが、どうもうまくリンクしません。
実際にはSheet1〜13まであり、個々のSheetの"T1"にある日付を、ブックを保存する時に変更したいのです(シートをアクティブにしない方法が良いのです)が、どうしたらうまくリンクできるようになるのでしょうか?
初歩的な質問で申し訳ありません。

【47270】Re:更新日付の自動変更
回答  Kein  - 07/3/7(水) 1:02 -

引用なし
パスワード
   >ブックを閉じる時に
ということなら、Before_Close イベントにします。こんな感じです。

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  With Worksheets(1).Range("T1")
   .Value = Date
   Worksheets.FillAcrossSheets .Cells
  End With
  ThisWorkbook.Save
End Sub

【47276】Re:更新日付の自動変更
質問  くやっち  - 07/3/7(水) 8:15 -

引用なし
パスワード
   ▼Kein さん:
>>ブックを閉じる時に
>ということなら、Before_Close イベントにします。こんな感じです。
>
>Private Sub Workbook_BeforeClose(Cancel As Boolean)
>  With Worksheets(1).Range("T1")
>   .Value = Date
>   Worksheets.FillAcrossSheets .Cells
>  End With
>  ThisWorkbook.Save
>End Sub

ご回答ありがとうございます。
せっかくご回答頂いたのですが、ブックを閉じるときではなく、閉じるときの「変更を保存」で「はい」をクリックしたときのみに動作するようにしたいのです。
よろしくお願いします。

【47298】Re:更新日付の自動変更
回答  Kein  - 07/3/7(水) 16:30 -

引用なし
パスワード
   そうなると、ちょっとややこしくなりますね・・。
以下のようなマクロでテストしてみたら、概ね目的どおりの動作を
しているようです。

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Dim Ans As Integer
 
  With ThisWorkbook
   If .Saved = False Then
     Ans = MsgBox("日付を入れて保存しますか" & vbLf & _
     "「いいえ」を押すと日付を入れずに保存します" & _
     vbLf & "「キャンセル」なら保存しません", 35)
     Select Case Ans
      Case 2
        Application.SendKeys "%n", True
      Case 6
        With .Worksheets(1).Range("T1")
         .Value = Date
         Worksheets.FillAcrossSheets .Cells
        End With
        .Save
      Case 7
        .Save
     End Select
   End If
  End With
End Sub

これをThisWorkbookモジュールへ入れた後、セルに何かの値を入力して、
保存せずにそのまま閉じるボタンを押して下さい。メッセージが出てきたら
必ず「はい」か「いいえ」のボタンを押して下さい。そうすることによって
日付のあるなしに拘わらず、入れたマクロが保存されます。次回からは
「キャンセル」を押してみるテストも、出来るようになります。

【47452】Re:更新日付の自動変更
お礼  くやっち  - 07/3/10(土) 22:45 -

引用なし
パスワード
   ▼Kein さん:
>そうなると、ちょっとややこしくなりますね・・。
>以下のようなマクロでテストしてみたら、概ね目的どおりの動作を
>しているようです。
>
>Private Sub Workbook_BeforeClose(Cancel As Boolean)
>  Dim Ans As Integer
> 
>  With ThisWorkbook
>   If .Saved = False Then
>     Ans = MsgBox("日付を入れて保存しますか" & vbLf & _
>     "「いいえ」を押すと日付を入れずに保存します" & _
>     vbLf & "「キャンセル」なら保存しません", 35)
>     Select Case Ans
>      Case 2
>        Application.SendKeys "%n", True
>      Case 6
>        With .Worksheets(1).Range("T1")
>         .Value = Date
>         Worksheets.FillAcrossSheets .Cells
>        End With
>        .Save
>      Case 7
>        .Save
>     End Select
>   End If
>  End With
>End Sub
>
>これをThisWorkbookモジュールへ入れた後、セルに何かの値を入力して、
>保存せずにそのまま閉じるボタンを押して下さい。メッセージが出てきたら
>必ず「はい」か「いいえ」のボタンを押して下さい。そうすることによって
>日付のあるなしに拘わらず、入れたマクロが保存されます。次回からは
>「キャンセル」を押してみるテストも、出来るようになります。

うわーっ!
すごいです。
ありがとうございます。
出張で返信が遅くなり申し訳ありませんでした。
ちょっとやってみます。
また分からなると思いますのでご教授ください。

6057 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free