読者です 読者をやめる 読者になる 読者になる

Powerpoint VBAを使おう!

Powerpoint VBAやExcelのVBAで遊んでいます。Word VBAも始めました。

音を鳴らす方法 メモ

電子黒板で表示しておくためにタイマーマクロを何度か作りました。

 

最初はExcelで作ってましたけど,見た目でいろいろ気になることがあり,

パワーポイントで作り直しました。

 

その時検討したのが,音の鳴らし方。試してみたのは

1.Beep
2.Beep API
3.PlaySound API
4.メディアコントロールを制御

Beep APIは音の高さや長さも変えれるので今でも好きです。

Declare Function BeepAPI Lib "kernel32.dll" Alias "Beep"(ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
Sub a()
    Call BeepAPI(500, 300)
    Call BeepAPI(800, 500)
End Sub

第一引数で音の高さを決めれます。大きくするほど高い。どこかで音階ごとの数値を見たことがありますが,忘れました。第二引数で音の長さを決めれます。

 ほかにファイルを用意しなくていいですし,便利でした。

ただ,あまりに機械的な(?)音なので,(゚д゚)!驚く子がよくいます。

 

そこで耳に優しい音を~と思い,PlaySound APIを試してみて,とてもいいものだと思いました。難点はwavファイルを忘れずに一緒に持ち運ばないといけないことで,これがかなり気がかりでした。

最終的に落ち着いたのはパワーポイントならではな感じのメディアコントロール制御。

パワーポイントすごいなぁと思った機能でした。手順は,

 

まず音声ファイルをスライドに貼ります。私は画面外にだいたい貼ってます。

f:id:chemiphys:20161230093827p:plain

制御するために音声も名前を変えます。図では stop という名前にしているところです。ボリュームを変えるとちゃんと覚えてるので,貼った後音の大きさの制御もできる優れもの。

音を鳴らすときは,次のコードです。

SlideShowWindows(1).View.Player(TSlide.Shapes("stop").Id).Play

 

スライドショーウィンドウからの制御なので,スライドショー中しか試せないのが難点。

スライドショー状態にして,イミディエイトウィンドウから操作して確かめてました。

TSlideってのはわたしのコードではよく出てきますがターゲットとなるスライドです。今回はボタンを押して鳴らすというわけではないので,

Dim TSlide as Slide
Set TSlide=activepresentation.Slides(SlideShowWindows(1).View.CurrentShowPosition)

こんな感じでスライドを指定するか,

Dim TSlide as Slide
Set TSlide=Activepresentation.slides(2)

のようにスライド番号を利用して直接指定するかです。powerpointはactivepresentationって表現がとっても長いので,できるだけ早い段階でSlideオブジェクトに入れておかないと疲れますね(;´▽`A``

メディアコントロールですが,シェイプの仲間になるようで,Shapesで記述するんですが,そのIDを使って特定されてるみたいなので,上みたいな書き方。

 

とってもシンプルに書けるので,いろんな音をパワーポイントでマクロで鳴らせます。

タイマーコントロールとの相性はいいですね。

 

PlaySound APIの記述もマクロに残してたので,一応貼り付けておきます。宣言部分でAPIを宣言しておいて,

Private Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long
Private Const SND_SYNC = &H0 '同期再生
Private Const SND_ASYNC = &H1 '非同期再生
Private Const SND_LOOP = &H8 '繰り返し再生
Private Const SND_PURGE = &H40 '停止

 鳴らすのは

Call PlaySound(ActivePresentation.Path & "\poon.wav", 0, SND_ASYNC)

 こんな感じ。パスの指定が面倒なので,同じ場所にwavファイルを置く想定で作っていました。Excelで音鳴らそうと思ったらこれも使うのかなぁと思い,メモとして書き残し。。

 これもシンプルでいいものだと思ってましたが,パワーポイント限定でなら,メディアコントロールのほうが貼り付けたらもう音声も一緒に運べるし,大きさも貼った後変えれるしいいことづくめ。いい機能だなぁと思います。