Excel (VBA)

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

 
(Windows 10全般 : Excel 2016)
Ontimeメソッドの動作について
投稿日時: 19/08/01 14:28:24
投稿者: dendentom

Ontimeメソッドを使い、毎日決まった時刻に特定プロシージャが実行されるようにしたいと思っているのですが、時刻になっても動作しません。
どこかプログラムがおかしいところがあるのかご教示いただけませんでしょうか?
 
プロシージャ実行時刻は実行ファイル(Ontimeメソッドがあるファイルと同じ)の特定シートに記載しています。なおOntimeメソッドは「標準モジュール」で作成したモジュール内にあり、呼び出し先プロシージャも別の標準モジュールになりますが、同一ファイル上にあります。
 
画像の貼り付けができないので、シート上の記入は以下にイメージを記入します。
 
  XLSMファイル
       |- worksheet
              |- range("earliest_time") ※セルに名前を付けてます。
 
                  セルには以下のような形式で入力しています。24H形式です。
                  「9:30」
 

Option Explicit

※"restapi_common"シート上のプロシージャではなく、標準モジュールのプロシージャです。
Sub process_report()

    Dim my_wsht As Worksheet
    Set my_wsht = ThisWorkbook.Worksheets("restapi_common")
    
    With my_wsht
        
        '#earliest_time
            Dim earliest_time As Date
                earliest_time = .Range("earliest_time")
    
            Application.OnTime TimeValue(earliest_time), "test"

    End With
End Sub


※別の標準モジュール内のプロシージャです。
Function test()

    msgbox "実行されました"

End Function
[/quote]

回答
投稿日時: 19/08/01 14:36:01
投稿者: Suzu

プロシージャ process_report はどうやって起動するのでしょうか?

投稿日時: 19/08/01 15:10:26
投稿者: dendentom

ご回答ありがとうございます。
 
指定した時刻までにontimeメソッドが埋め込まれているxlsmファイルを開いていればよいものと思っていましたが、違いましたでしょうか?
となると指定された時刻にどうやってプロシージャprocess_reportを呼び出すかってことになると思うんですが、わかりませんでした。
 
ご教示いただけませんでしょうか?

回答
投稿日時: 19/08/01 16:37:01
投稿者: Suzu

dendentom さんの引用:
指定した時刻までにontimeメソッドが埋め込まれているxlsmファイルを開いていればよいものと思っていましたが、違いましたでしょうか?

 
OnTImeはメソッド です。 〜〜をしなさいと言う命令です。
 
ExcelのVBAはユーザーが実行を促す以外は、
オブジェクトに対しての操作イベントを契機として実行されます。
 
つまり、指定時刻前に、
 Application.OnTime TimeValue(earliest_time), "test"
を実行しないといけません。
 
一度実行してしまえば、ブックを開いていれば良いので
 
引用:
プロシージャ process_report はどうやって起動するのでしょうか?

 
WorkBookのOpenイベントで process_report を実行するなり、
起動ボタンを作って実行すれば良いでしょう。
 
 
指定した時刻にマクロを実行する(OnTimeメソッド)
https://www.moug.net/tech/exvba/0130013.html

投稿日時: 19/08/01 17:18:59
投稿者: dendentom

出来ました!ありがとうございます!
 
<備忘録>
ThisworkbookにWorkbook_Openのプロシージャを作成。
そのプロシージャ内に以下のコードを記述した。
 

    Dim my_wsht As Worksheet
    Set my_wsht = ThisWorkbook.Worksheets("restapi_common")
    
    With my_wsht
        
        '#earliest_time
            Dim earliest_time As Date
                earliest_time = .Range("earliest_time")
    
            Application.OnTime TimeValue(earliest_time), "test"

    End With