初めに : このスライドの実行の仕方 ① どれでも任意 の開始したいスライド を選択してください。 ② 「マクロの実行」から 「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
© Copyright 2024 ExpyDoc