Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
簡易時計を常に特定のシートに表示させたい
投稿日時: 24/09/02 23:36:21
投稿者: けけちゃま

いつもお世話になっております。
初心者となります。
 
Sheet2のB3にこちらのサイトの即効テクニックの簡易時計を置きたいのです。
サイト:https://www.moug.net/tech/exvba/0130009.html
 

Sub Sample()

Dim myTime As Date

    myTime = CDate(Format(Now() + TimeValue("00:01:00"), "hh:mm:00"))
    Range("A1").Value = Now()
    Columns("A").AutoFit
    Application.OnTime myTime, "Sample"

End Sub

 
このコードを標準モジュールにかいて、エクセル上のオートシェイプボタンにマクロ登録したのですが、Sheet2がアクティブになった時点で自動で起動したいのです。
 
初心者ながらに考えたのが、Sheet2のActivateイベントプロシージャを使うのかと思い下記のコードを書きました。
 
 
 
 
Private Sub Worksheet_Activate()

Dim myTime As Date

    myTime = CDate(Format(Now() + TimeValue("00:01:00"), "hh:mm:00"))
    Range("A1").Value = Now()
    Columns("A").AutoFit
    Application.OnTime myTime, "Worksheet_Activate()"

End Sub

 
 
これで一瞬成功したと思ったのですが、なんとSheet2を1分以上開いていると
「マクロ’Worksheet_Activate()’を実行できません。このブックでマクロが使用できないか、またはすべてのマクロが無効になっている可能性があります」
と表示されてしまいます。
確かに、Sheet2を開いている以上、Worksheet_Activate()が起動できないよな・・と思うのですが、だったらどうすればいいのかがわからないのです。
 
大変お手数ですが、お分かりになられるかたがおりましたらご教示頂けますでしょうか… orz...
 

回答
投稿日時: 24/09/03 00:13:54
投稿者: simple

標準モジュールにあるプロシージャを呼ぶようにしてください。
 
そのほか、下記に留意する必要があります。
(1)Sheet2がアクティブになったときにコールするようにするだけでは、
   前のものと重なっていきます。前のものはリセットする必要があります。
(2)また、ブックを閉じても、Excelが継続していると、再度ブックが開きます。
   ブックを閉じる時にリセットを掛ける必要があります。
    
参考コードは以下です。
(検証の関係で、10秒おきに更新するようにしていますので、そちらで修正してください)

■標準モジュール
Option Explicit
Dim myTime    As Date
Sub test()
    myTime = Now() + TimeValue("00:00:10")
    Sheet2.Range("A1").Value = Now()
    Sheet2.Columns("A").AutoFit
    Application.OnTime myTime, "test"
End Sub

Sub myReset()
    On Error Resume Next
    Application.OnTime EarliestTime:=myTime, _
        Procedure:="test", Schedule:=False
End Sub

■Sheet2モジュール
Private Sub Worksheet_Activate()
    Call myReset
    Call test
End Sub

■Thisworkbookモジュール
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Call Reset
End Sub

投稿日時: 24/09/03 01:26:22
投稿者: けけちゃま

simple様
 
前回に引き続きありがとうございます泣。
(前回、simple様から簡易時計を教えてもらいはまった次第です)
そして起動しました感激。
 
なんとなくコールするのか?と一瞬よぎったりもしたんですが、いずれにしてもプロシージャ前に変数宣言をすることですべてのプロシージャでその変数名を使える技も知らなかったので、到底自力では無理でした…。
ご教示いただいたコードは、コピペだけでなく復習もしたいと思います。
 

引用:
Excelが継続していると、再度ブックが開きます

 
この現象もいろいろ実験するなかで起こっており(別件)、「あれ?エクセルブック閉じたんだけどなぁ?」とあまり深く考えずにスルーしておりましたが、いま繋がりました。(目から鱗)
 
 
質問してよかったです。
これで眠れそうです。
夜分に回答いただきありがとうございます。