PowerPoint VBA - @niftyホームページサービス

初めに : このスライドの実行の仕方
① どれでも任意
の開始したいスライド
を選択してください。
② 「マクロの実行」から
「strt」を実行すると、選択
しているスライドから開始
します。
PowerPoint VBA
•
•
•
•
•
•
•
PowerPoint VBA を学ぶには
PowerPoint VBA の基礎
ウィンドウについて
基本的な構文
Shapes
AutoShape
Textの扱い
1 PowerPoint VBA を学ぶには
• VBAを学ぶ前に
・Excel VBAでVBAの基本を学び
ましょう。
Excelは利用者が多い分、VBAの活
用方法も多岐にわたり、Windowsの
操作や他のアプリケーションの操作に
至るまで何でもできてしまうのではな
いかと思うくらいです。
変数の使い方や一般的な構文の書
き方と使い方を身に着け、エクセルの
セル操作とオートシェープの使い方を
理解しておくとPowerPointでもそれを
活かすことができます。
• PowerPointの一般機能を覚え
ましょう
一般機能もわからない状態でVBAに
チャレンジしても、遠回りになるばかりで
す。また、いつまでたっても理解がすすみ
ません。
画面を見ながらでもおよそのことは他人
に教えられるくらいまでPowerPointの使
い方を覚えておきましょう。そうすれば「マ
クロの記録」を有効に活用できるでしょう。
なお、VBAの基本的な構文はExcelと
共通ですが、Windowやオブジェクトは
まったく異なるので、頭の中を空っぽにし
ておくと理解しやすいでしょう。
2 PowerPoint VBA の基礎
•
PowerPoint2007からは「マクロの記録」がで
きなくなりました。
VBAを学びたければ2003版などの古い版
で「マクロの記録」をとることが大変役にたち
ます。これから始めようというかたは、2007
のヘルプを頼りにするしかありません。
Windowsの普及に伴って入門者が増えて
きたことは喜ばしいことですが、入門者の質
は非常に落ちてきました。ヘルプを読めばた
いていのことを理解できるようになりますが、
膨大な量がある上に専門的な用語も多く、初
心者にはかなり難しいようです。
そのせいか、ネットの普及もあってすぐに
掲示板で質問する人が目立ちます。しかし、
この人たちの中には適切な日本語も書けず、
自分で調べる努力さえ怠る人たちが多く見ら
れます。おそらく何年たっても自分で書ける
ようにはならないでしょう。
逆に、Excel VBAを少し学んでから
PowerPointにも首を突っ込んできた人
やヘルプを調べたり根気よく自分で試し
たりする人は、初めは遅いように見える
かもしれませんが、学ぶこととは何かを
理解しているのでスムースに進んでい
けることでしょう。
「PowerPoint VBAはわかりにくい」と感じる
主な原因は、Windowの指定方法がわ
かりにくいためだと思います。次のスラ
イドにまとめてある概要を理解すれば
あとは簡単です。Powerpointは単なる
プレゼンテーション用のアプリケーショ
ンですからExcel VBAとは違って実に
簡単です。
ウィンドウ関連について
•
エクセルと対比すると次のような関係があります。これがわかればあとは簡単です。
編集画面(Activewindow)とスライドショー画面(SlideShowWindow) さえわかれば
VBAでどちらのWindowでも自由に操作することが可能になります。
項目
Excel
PowerPoint
VBA
Excel VBA
PowerPoint VBA
Editor
VBEウィンドウ
VBEウィンドウ
Application.window
Application.window
親ウィンドウ
編集画面
ファイルと
ウィンドウ
WorkSheet
ActiveSheet
ActiveWorkbook
Workbooks.Window
Slide
ActiveWindow
ActivePresentation
Presentations.Window
内部の構成
Worksheets
Slides
基本要素
Range
SlideRange
その他
UserForm
Cells
Shapes
SlideShowWindow
基礎となる知識
•
・
PowerPoint アプリケーション
MsgBox "Application.Name : " & Application.Name
マクロの実行「strt」で
スライドショーを開始し
た後に「実行」ボタンを
クリック
‘現在読み込まれているPPTファイルのWindow (Presentation)
MsgBox "Presentation 1 : " & Application.Windows(1).Presentation.Name
MsgBox "Presentation 2 : " & Application.Windows(2).Presentation.Name
•
'現在読み込まれているPresentations
MsgBox "1 : " & Presentations(1).Name & vbCrLf & _
"2 : " & Presentations(2).Name
・ アクティブなプレゼンテーション
MsgBox "ActivePresentation : " & ActivePresentation.Name
2つのプレゼンテー
ションを読み込んでお
いてから実行してみ
てください
・ アクティブなウィンドウ これは編集画面のWindowのことなので、スライドショー実行中はエラーになる
MsgBox "ActiveWindow.Caption : " & ActiveWindow.Caption
MsgBox "ActiveWindow.Presentation.Name : " & ActiveWindow.Presentation.Name
・パスのみ および パスを含むファイル名
MsgBox Presentations(1).Path _
& vbCrLf & Presentations(1).FullName
実行
基本的な構文 1・・・・変数
変数と型宣言
数値
Dim i as Long , Dim j as Single , Dim k as Double
文字列 Dim Namae as String
などの方法で宣言します
•
•
1次元配列
数値
Dim i(100) as Long ,
Dim k(15) as Double
Dim j(50) as Single
などの方法で宣言します
2次元配列 PowerPointで使う必要性は薄い。Excelでは重要。
数値
Dim i(1000,10) as Long
1000人の10科目+合計得点 など
Dim j(50,20) as Single
浮動小数点8桁
Dim k(15,100) as Double
浮動小数点15桁
などの方法で宣言します
文字列
Dim Namae(1000,10) as String
1000人分の入社年度ごとの名簿など
基本的な構文 2・・・・繰り返し
・ For i=1 to 100
J=J+i
Next
・
Do
j=j+i
Loop until j>1000
実行
・ 回数が不明な場合は以下の例のようにします。
① Dim sld as Slide
For Each sld in ActivePresentation.Slides ‘すべてのスライドのスライド番号を取得する
MsgBox “① sld.SlideNumber : “ & sld.SlideNumber
Next
② Dim i as long
For i=1 to ActivePresentation.Slides.Count
‘すべてのスライドの名前を取得する別法
Msgbox “② ActivePresentation.Slides(i).Name : “ &ActivePresentation.Slides(i).Name
Next
③ Dim i as long
For i=1 to ActivePresentation.Slides(1).shapes.Count
Msgbox ActivePresentation.Slides(i).shapes.Name
Next
‘slide1のすべてのオブジェクトを取得
Shapes のプロパティの取得・・・・繰り返し
•
•
•
•
•
•
•
Beep
‘① 各スライドのShapeの数
文字列の連結
for ~ each の利用
Dim ctrTXT As String
Dim sld As Slide
For Each sld In ActivePresentation.Slides
ctrTXT = ctrTXT & "① Slide" & sld.SlideNumber & " shapes.count : " & sld.Shapes.Count & vbCrLf
Next
MsgBox ctrTXT
•
•
•
•
•
•
Beep
‘② スライド1のShapeの名前
文字列の連結
for ~ next count の利用
Dim namae As String
For i = 1 To ActivePresentation.Slides(1).Shapes.Count
namae = namae & ActivePresentation.Slides(1).Shapes(i).Name & vbCrLf
Next
MsgBox "② Slides(1).shapes.Name : " & vbCrLf & namae
•
•
•
•
•
•
•
•
•
•
•
Beep
‘③ このスライドショー開始時に編集画面のスライド一覧で選択していたのShapeにある文字列
文字列の連結
for ~ next
if ~ then
with句の利用
Dim txts As String
n=??? ‘これは内緒の値
With ActivePresentation.Slides(n)
For i = 1 To .Shapes.Count
If .Shapes(i).HasTextFrame Then
txts = txts & .Shapes(i).TextFrame.TextRange.Characters.Text & vbCrLf
End If
Next
MsgBox txts
End With
実行
AutoShapeの移動位置とサイズ変更
Dim i As Long
Dim x(500) As Single
Dim y(500) As Single
Dim rect As Shape
Const Pi = 3.14
Set rect =
ActivePresentation.SlideShowWindow.View.Slide.Shapes("
Rectangle 4")
With rect
For i = 10 To 500 Step 10
.Top = i
.Left = i
DoEvents: DoEvents: DoEvents
Next
End With
For i = 0 To 360 Step 6
x(i) = Sin(2*i * Pi / 360)
y(i) = Cos(2*i * Pi / 360)
Next
‘2007対策
With rect
For i = 0 To 360 Step 6
.Top = y(i) * 200 + 200
.Left = x(i) * 300 + 300
DoEvents: DoEvents: DoEvents
Next
.Top = 300
.Left = 300
End With
With rect
For i = 0 To 360 Step 6
.Width = y(i) * 300 + 150
.Height = x(i) * 300 + 150
DoEvents: DoEvents: DoEvents
Next
.Width = 100
.Height = 100
Set rect = Nothing
End With
もっと効率の良い書き方ができますが、ここでは流れのわかりやすさを優先しています。
実行
80
アニメの設定
80種類あります
• これは
テストサンプル
画像データ量縮小と 順序入れ替え
高解像度の写真などは5
~20分の1程度にデー
タ量が減ります。
この写真は1枚2Mbytesの巨大な写真を
各100kbytesくらいに圧縮済のものです。
↓ 20歳の私、高齢のせいか
口の脇に大きな腫瘍が。
今はもっと大きくなってしまった。
文字の操作 1
Option Explicit
Private Declare Sub Sleep Lib “kernel32” (ByVal dwMilliseconds As Long)
•
あいうえおABCDE
Private Sub CommandButton1_Click()
Dim txt As String
Dim i As Long
With ActivePresentation.Slides(13).Shapes(2).TextFrame.TextRange
.ParagraphFormat.WordWrap = msoTrue
.Text = “あいうえおABCDE”
.Characters
With .Font
.Bold = msoCTrue
.Color = i * &H7010
以下省略
For i = 0 To 40
.Characters(i Mod 10).Font.Color = &H404040 + i * &H70905