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

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

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

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

Q&A

解決済

1回答

8353閲覧

VBAでパワーポイントの指定スライドをアクティブにしたいです

nyumonsya

総合スコア34

VBA

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

0グッド

1クリップ

投稿2020/07/13 03:51

お助け頂きたいですm(_ _)m

VBAでパワーポイントの指定スライドをアクティブにしたいです。
例えば、5ページ中の、3ページ目をアクティブにする、という意味です。
基礎の基礎で簡単に見えるのですが、どうしても動いてくれません。
どこが問題なのか分からず、解決法をご教示頂けるととても助かります。

※以下のコードの最下段の「PPTPlz.Slides(2).Select」が機能しません・・。
ググると出てくる↓↓の二つも、「コンパイルエラー 拡張子が不正です」とエラーメッセージが出て、そもそも動かなくなります。
ActiveWindow.View.GotoSlide Index:=2
ActivePresentation.Slides(2).Select

【VBAコード】

Sub PPTのスライドを移動したい() '変数定義 Dim objPpt As Object Dim PPTPlz As Object 'PowerPointプレゼン Dim objTitle As Object Dim pptSld As Object 'PowerPointスライド Dim PPTW As Single Dim PPTH As Single Dim i As Variant, j As Variant On Error Resume Next '動作を非表示にする With Application .ScreenUpdating = False .EnableEvents = False .DisplayAlerts = False .Calculation = xlCalculationManual End With strPPTFullPath = "保存する際のPPT名です.pptx" Set objPpt = CreateObject("PowerPoint.Application") objPpt.Visible = True objPpt.Presentations.Add Set objFile = objPpt.ActivePresentation With PPTPlz.PageSetup PPTH = .SlideHeight PPTW = .SlideWidth End With '別途Excelファイルがあり、「PPT」というシートの情報を参照してグラフを貼っています Worksheets("PPT").Activate 'ExcelのD列をカウント→一番下の行まで処理を繰り返す For i = 3 To Worksheets("PPT").Range("D3").End(xlDown).Row Dim sh As String sh = Sheets("PPT").Range("F" & i) Worksheets(sh).Activate 'グラフオブジェクト選択 ActiveSheet.ChartObjects(Worksheets("PPT").Range("D" & i)).Activate Worksheets(sh).ChartObjects(Worksheets("PPT").Range("D" & i)).Copy 'PowerPointスライド追加 Set PPTPlz = objFile.Slides.Add(Index:=i - 2, Layout:=12) '貼り付け PPTPlz.Shapes.PasteSpecial DataType:=6 PPTPlz.Shapes.PasteSpecial MsoTriState:=False With PPTPlz.Shapes(1) .Top = 60 .Left = 0 End With Next i 'スライド移動 PPTPlz.Slides(3).Select End Sub

以上、何卒、よろしくお願い致します。

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

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

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

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

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

meg_

2020/07/13 10:55

「エラーは出ていない」との理解で良いでしょうか?
nyumonsya

2020/07/14 15:00

はい、「PPTPlz.Slides(2).Select」がスルーされるだけで、エラーは出ておりません!
meg_

2020/07/15 11:07 編集

imihitoさんの回答にもありますが、「On Error Resume Next」のためにエラーが出ていないように見えています。この状態でデバッグするのはかなり難しいでしょう。何故このコードを入れたのは分かりませんがあまり使わない方が良いかと思います。
nyumonsya

2020/07/15 12:49

meg_様 なるほど・・・当然ですよね・・・!!! レベルが低過ぎてすいません、凄く理解できました、ありがとうございます!
guest

回答1

0

ベストアンサー

質問されている問題は、PowerPointの操作方法というより、VBAの書き方に起因する問題です。

私の目線から見ると大きく4つの問題があります。

一つ目の問題は、宣言されていない変数が多くあることです。
このような状況は、Option Explicitを設定していれば発生しません。
Option Explicitをご存知なければ、調べてVBEの設定の変更を行ってください。

二つ目の問題は、変数名と設定されているものが異なることです。
例えば、Forループ内に以下のコードがありますが、「プレゼンテーション」の変数に「スライド」を設定していることになっています。
Set PPTPlz = objFile.Slides.Add(Index:=i - 2, Layout:=12)

三つ目の問題は、変数宣言時にオブジェクトの具体的な型を明示していないことです(Dim objPpt As Objectなど)。
初心者であればこそ、型を明示してVBAの入力補完などの補助を受けるべきです。
PowerPointの型は、「Microsoft PowerPoint XX.X Object Library」(XX.Xは数字)を参照すれば、Excelでも使用できるようになります。

四つ目の問題は、On Error Resume Nextを無造作に使っていることです。

「PPTPlz.Slides(2).Select」が機能しません・・

と質問にありますが、現状のコードはエラーでぐちゃぐちゃの状態で上記コードに到達するため、思ったように動作しないのは当然です。


参考までに自分なりにざっくり直したコードを以下に示します。

vba

1Sub PPTのスライドを移動したい() 2'https://teratail.com/questions/277205 3 4'On Error Resume Next''本当に必要な箇所のみ使用するべき。 5 6 '動作を非表示にする 7 With Application 8 .ScreenUpdating = False 9 .EnableEvents = False 10 .DisplayAlerts = False 11 .Calculation = xlCalculationManual 12 End With 13 14 Dim strPPTFullPath As String 15 strPPTFullPath = "保存する際のPPT名です.pptx" 16 17 '「PowerPoint.~」となっている型名は 18 '「Microsoft PowerPoint XX.X Object Library」(XX.Xは数字)を参照すれば使用可能。 19 Dim objPpt As PowerPoint.Application 20 Set objPpt = CreateObject("PowerPoint.Application") 21 objPpt.Visible = True 22 23 24 25 Dim PPTPlz As PowerPoint.Presentation ' As Object 'PowerPointプレゼン 26 Set PPTPlz = objPpt.Presentations.Add() 27 28 ''操作対象はブックから明示した方が良い 29 Dim sourceBook As Excel.Workbook 30 Set sourceBook = ThisWorkbook ''ActiveWorkbook 31 32 '別途Excelファイルがあり、「PPT」というシートの情報を参照してグラフを貼っています 33 Dim wsPPT As Excel.Worksheet 34 Set wsPPT = sourceBook.Worksheets("PPT") 35 wsPPT.Activate 36 'ExcelのD列をカウント→一番下の行まで処理を繰り返す 37 Dim r As Long 38 For r = 3 To wsPPT.Range("D3").End(xlDown).Row 39 40 Dim sheetName As String 41 sheetName = wsPPT.Range("F" & r).Value 42 43 Dim sh As Excel.Worksheet 44 Set sh = sourceBook.Worksheets(sheetName) 45 46 'グラフオブジェクト選択 47 Dim chartName As String 48 chartName = wsPPT.Range("D" & r).Value 49 50 Dim copyChart As Excel.ChartObject 51 Set copyChart = sh.ChartObjects(chartName) 52 copyChart.Copy 53 54 'PowerPointスライド追加 55 Const ppLayoutBlank = 12 ''PowerPoint.PpSlideLayout.ppLayoutBlank 56 Dim pptSld As PowerPoint.Slide 'PowerPointスライド 57 Set pptSld = PPTPlz.Slides.Add(Index:=r - 2, Layout:=ppLayoutBlank) 58 59 '貼り付け 60 Const ppPastePNG = 6 ''PowerPoint.PpPasteDataType.ppPastePNG 61 Dim pastedShpRng As PowerPoint.ShapeRange 62 Set pastedShpRng = pptSld.Shapes.PasteSpecial(DataType:=ppPastePNG) 63 With pastedShpRng 64 .Top = 60 65 .Left = 0 66 End With 67 Next r 68 69 'スライド移動 70 PPTPlz.Slides(3).Select 71 72End Sub

投稿2020/07/13 10:58

imihito

総合スコア2166

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

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

nyumonsya

2020/07/14 15:12

imihito様 ご回答を頂き、誠にありがとうございます!! アドバイス頂いた通りに試してみました。 「Option Explicit」も調べて最上部に記してあります。 しかし、「Dim objPpt As PowerPoint.Application」の箇所で 「コンパイルエラー ユーザ定義型は定義されていません」と エラー表示されてしまいます・・ 私の環境が悪いのでしょうか・・?? もしよろしければ、引き続き何卒よろしくお願い致しますm(_ _)m
imihito

2020/07/14 15:21

回答本文及び、コンパイルエラーとなる行のすぐ上のコメントに書いてあるように、PowerPoint用のライブラリの参照設定を追加してください。 あるいは、型宣言をVariantやObjectに戻せば動作するはずです。
nyumonsya

2020/07/15 13:02

参照設定が上手く出来ていませんでした、設定して実行した所、思い通りに動作しました!! とても助かりました、これで一気に作業が進行します! 本当に本当にありがとうございました!!!!!!m(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問