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

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

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

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

1回答

531閲覧

マクロ(PowerPoint)にてページをまたいでオブジェクトを更新したい。

0987kjhfas

総合スコア3

VBA

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2022/05/22 13:09

編集2022/05/22 13:10

パワーポイントのマクロについて不明点があるため、
質問させていただきます。

現在VBAを利用してタイマーを作成しています。
2ページあり、1ページ目のタイマー(label1オブジェクト)は予想通りの動きをするのですが、
2ページ目のタイマー(lavel1オブジェクト)が動きません。

同一ページにlavel1を複製すると動くのですがページをまたぐと動きません。
オブジェクトはページをまたげないものなのでしょうか。
有識者の皆様、ご教授ください。

VBA

1Option Explicit 2 3'スタートボタン押下時のTimer()関数の戻り値 4Dim sStart As Single 5'現在時刻のTimer()関数の戻り値 6Dim sCurrent As Single 7'前回表示を更新した自国のTimer()関数の戻り値 8Dim sPrevious As Single 9'True:カウントアップ false:停止 10Dim bCount As Boolean 11'時間 12Dim iHour As Integer 13'分 14Dim iMin As Integer 15'秒 16Dim iSec As Integer 17Dim strTmp As String 18 19'スライドショーでページが切り替わった時に実行 20Public Sub OnSlideShowPageChange(ByVal Wn As SlideShowWindow) 21 'スライドショー一枚目に切り替えたとき0秒を表示 22 If ActivePresentation.SlideShowWindow.View.Slide.SlideIndex = 1 Then 23 'Label1.Caption = "00:00" 24 Label1.Caption = strTmp 25 End If 26End Sub 27'スライドショーが終了時に実行 28Public Sub OnSlideShowTerminate(ByVal Wn As SlideShowWindow) 29 'タイマーの更新を終了 30 bCount = False 31End Sub 32Private Sub StartButton_Click() 33 34 bCount = True 35 36 'sStartに現在の時刻を秒数にしたものを代入 37 sStart = Timer() 38 39 'Lbel1にsStartを表示 40 'CStr 関数は、数値や日付などを文字列型 (String) に変換 41 Label1.Caption = "00:00" 42 43 '更新時刻を記録 44 sPrevious = sStart 45 46 'bCountがtrueの間、タイマーを更新。ストップボタンが押されるとbCountがfalseになりタイマーが止まる 47 Do While (bCount = True) 48 'sCurrentに現在時刻を代入 49 sCurrent = Timer() 50 51 If (sCurrent - sPrevious) >= 1 Then 52 53 '経過秒を表す整数 54 Dim iElapsedSec As Integer 55 iElapsedSec = CInt(sCurrent - sStart) 56 57 iHour = iElapsedSec \ 3600 58 iMin = (iElapsedSec Mod 3600) \ 60 59 iSec = (iElapsedSec Mod 3600) Mod 60 60 61 Dim strHour As String 62 Dim strMin As String 63 Dim strSec As String 64 65 '時間が二桁以外の場合ゼロを足す 66 If iHour >= 10 Then 67 strHour = CStr(iHour) & ":" 68 Else 69 strHour = "0" & CStr(iHour) & ":" 70 End If 71 72 '分が二桁以外の場合ゼロを足す 73 If iMin >= 10 Then 74 strMin = CStr(iMin) & ":" 75 Else 76 strMin = "0" & CStr(iMin) & ":" 77 End If 78 79 '秒が二桁以外の場合ゼロを足す 80 If iSec >= 10 Then 81 strSec = CStr(iSec) 82 Else 83 strSec = "0" & CStr(iSec) 84 End If 85 86 Label1.Caption = strMin & strSec 87 strTmp = strMin & strSec 88 sPrevious = sCurrent 89 End If 90 DoEvents 91 Loop 92End Sub 93Private Sub StopButton_Click() 94 bCount = False 95End Sub

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

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

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

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

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

guest

回答1

0

PowerPoint の VBA に詳しいわけでは無いですが・・

オブジェクトはページをまたげないものなのでしょうか。

VBA の画面を見ると Slide1Slide2 が別のソースになっているようです。
おそらく Label1Slide1Slide2 に存在しており、別ものなのではないかと思います。
関数を共通化したいのであれば「標準モジュール」に関数を作成し、それを呼び出す形になるかと思います。

イメージ説明

投稿2022/05/22 13:47

cx20

総合スコア4633

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

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

0987kjhfas

2022/05/23 00:02

早速のご返答ありがとうございます。 標準モジュールの件承知いたしました。 ちなみにですが、スライドごとのオブジェクトに対して代入を行うことができればと思うのですが、方法ご存じであればご教授ください。 イメージ slide(2).label1.Caption
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問