質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

769閲覧

VBAで指定秒数毎にサブルーチンを実行したい

HYBCJ

総合スコア8

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2023/03/24 02:21

実現したいこと

  • VBAでして指定秒数毎にサブルーチンを実行したい

発生している問題・エラーメッセージ

コンパイルエラー: メソッドまたはデーターメンバーが見つかりません。

と表示されて動きません。

ここまでは正常に動きました

VBA

1Sub CalculateDate() 2 3 Dim numDays As Integer 4 Dim currentDate As Date 5 6 '38営業日後の日付を表示 7 numDays = 38 8 currentDate = Date 9 For i = 1 To numDays 10 currentDate = DateAdd("d", 1, currentDate) 11 Do While Weekday(currentDate, vbMonday) > 5 Or IsHoliday(currentDate) 12 currentDate = DateAdd("d", 1, currentDate) 13 Loop 14 Next i 15 ActivePresentation.Slides(1).Shapes("lp_real_m").TextFrame.TextRange.Text = Format(currentDate, "mm") 16 ActivePresentation.Slides(1).Shapes("lp_real_d").TextFrame.TextRange.Text = Format(currentDate, "dd") 17 18End Sub 19 20Function IsHoliday(testDate As Date) As Boolean 21 ' 国民の祝日のリストを設定する 22 Dim holidays As Variant 23 holidays = Array("1/1", "1/11", "2/11", "2/23", "3/20", "4/29", "5/3", "5/4", "5/5", "7/18", "8/11", "9/19", "9/23", "11/3", "11/23", "12/23") 24 Dim i As Integer 25 For i = 0 To UBound(holidays) 26 If Format(testDate, "m/d") = holidays(i) Then 27 IsHoliday = True 28 Exit Function 29 End If 30 Next i 31 IsHoliday = False 32End Function

常に最新の日付を表示したいため、
CalculateDateサブルーチンを5秒に1回実行するよう

VBA

1Sub RunEveryFiveSeconds() 2 '5秒毎に実行するサブルーチンの名前を指定 3 Application.OnTime Now + TimeValue("00:00:05"), "CalculateDate" 4End Sub

というコードを1行目に貼り付けたところ、

コンパイルエラー: メソッドまたはデーターメンバーが見つかりません。

というエラーになり、「Sub RunEveryFiveSeconds()」と「.OnTime」がハイライトしています。

ご教示いただけると助かります。
何卒よろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

PowerPoint

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sk.exe

2023/03/24 02:38 編集

> Application.OnTime Now + TimeValue("00:00:05"), "CalculateDate" その場合の Application とは(Excel.Application オブジェクトではなく) PowerPoint.Application オブジェクトです。 > メソッドまたはデーターメンバーが見つかりません。 PowerPoint.Application オブジェクトに OnTime というメソッドはありませんので、 件のエラーが発生します。
YT0014

2023/03/24 02:45

VBAの仕様は、アプリケーション毎に異なりますが、PowerPointに、Application.OnTimeが存在することは確認されているのでしょうか? こちらでざっと調べた限りでは、ExcelとWordでの存在は確認できましたが、PowerPointでの存在は確認できませんでしたが。
guest

回答1

0

ベストアンサー

修正依頼にコメントがあるように、PowerPointアプリケーションには OnTime メソッドはないので別の方法を考える必要があります。
Doループで経過時間を計測して、指定時間を超えたら実行するという方法があります。

下記の RunEveryFiveSeconds を実行すると5秒間隔で CalculateDate を実行します。
StopEveryFiveSecondsを実行すると繰り返しを停止します。

vba

1Option Explicit 2Dim TimerStop As Boolean 3 4Sub RunEveryFiveSeconds() 5 Dim NextTime As Date 6 TimerStop = False 7 Do 8 If NextTime <= Now Then 9 Call CalculateDate 10 NextTime = Now + TimeSerial(0, 0, 5) 11 End If 12 DoEvents 13 Loop Until TimerStop 14End Sub 15 16Sub StopRunEveryFiveSeconds() 17 TimerStop = True 18End Sub

投稿2023/03/25 03:04

hatena19

総合スコア33620

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

HYBCJ

2023/03/27 07:14

ありがとうございます!解決しました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問