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

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

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

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

Q&A

1回答

1898閲覧

PowerPoint VBAでスライドをコピぺする方法

Siwasu2021

総合スコア0

VBA

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

0グッド

0クリップ

投稿2021/12/14 10:12

前提・実現したいこと

ボールドテキスト
ここに質問の内容を詳しく書いてください。### ヘディングのテキスト
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

PowerPoint は Slide を Section に分けて格納できるようになって
機能が向上していますが、 PowerPoint の VBA を使って、特定の
Presentation の特定の Section から 別の Presentation の
特定の Section に Slide をコピペする際の、VBA の表記の仕方が
わかりません。ネット上の情報も乏しく困っております。
どなたか、ご存じの方がいらっしゃいましたら教えていただけませんで
しょうか。よろしくお願いいたします。

エラーメッセージ

該当のソースコード

PowerPoint の VBA
ソースコード

### 試したこと ここに問題に対して試したことを記載してください。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

こんな感じでどうでしょうか。

VBA

1Sub sample() 2 Dim moto As Presentation 3 Dim saki As Presentation 4 Set moto = ActivePresentation 5 Set saki = Presentations.Add 6 7 Dim secName As String 8 secName = "section1" 9 10 With moto.SectionProperties 11 Dim i, j, k 12 For i = 1 To .Count 13 If .Name(i) = secName Then Exit For 14 Next 15 If i > .Count Then Exit Sub 16 17 ReDim arr(.SlidesCount(i) - 1) 18 For j = 0 To UBound(arr) 19 arr(j) = .FirstSlide(i) + j 20 Next 21 22 moto.Slides.Range(arr).Copy 23 24 k = saki.Slides.Count + 1 25 saki.Slides.Paste k 26 saki.SectionProperties.AddBeforeSlide k, secName 27 28 29 End With 30 31End Sub

投稿2021/12/14 11:44

編集2021/12/14 12:12
jinoji

総合スコア4585

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

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

Siwasu2021

2021/12/15 00:52

jinoji 様  早速のご回答ありがとうございます。  おかげで解決方法が見えてきました。  簡潔なプログラミングスタイルも参考にさせていただきます。  ありがとうございます。
Siwasu2021

2021/12/15 11:44

前回はありがとうございました。  実は、もう一点教えていただきたく、お願いいたします。  質問:PowerPoint の VBA で     ある Presentation の 特定の Section の Slide をコピーして 別の Presentation の特定のsection (の末尾)にペーストしたい     のですが、VBAで行う Section の指定方法がわかりません。     ご存知でしたら教えていただきたく、よろしくお願いいたします。
jinoji

2021/12/15 14:12

上のコードの要領で、貼り付け先のpresentationの sectionproperties を順に見ていってnameが一致したところでFirst slide+slides countで末尾を割り出せば行けそうですが。
Siwasu2021

2021/12/16 00:42

jinoji さま  ありがとうございます。  試してみます。
Siwasu2021

2021/12/23 04:08 編集

jinoji さま  お世話になり、ありがとうございます。 教えていただいた方法でコピペを試みましたが、 コピーしたスライドをペーストする場合に、ペースト先のセクションに全くスライドがない場合には、セクション別にペーストできず、すべてのスライドが冒頭部分のセクション外にペーストされます。 私の勉強不足で、そうなる原因はわかりません。 重ねての質問で恐縮ですが、この点について、解決策がないでしょうか。
jinoji

2021/12/23 08:11

セクションにスライドがない場合はFirstSlideが-1 になるみたいなので、 私の書いたやり方だとペーストする場所がうまく計算できないようです。 If .SlidesCount = 0 Then と条件分岐して、、、と考えましたが、 他のセクションの構成次第なところがあって複雑になってしまいそうです。 プレゼンテーションの末尾に、新たにセクションを追加し、その後ろにペーストする、 みたいな仕様にしてみるわけにはいかないでしょうか。
Siwasu2021

2021/12/23 08:17

jinoni さま  ありがとうございます。  もうしばらく苦闘してみます。
Siwasu2021

2021/12/24 06:53

jinoji さま  貴重なヒントをありがとうございます。  コピー先である複数のセクションのそれぞれに対して手動でダミーのスライドを配置して、VBAによるスライド  のコピペを実行したところ、コピー元のセクションに対応するコピー先のセクションに対してスライドコピーが  出来ました。 後で、各セクションに残ったダミーのスライドを削除する手間はありますが、(これはVBA でで  きるかも) 強烈な省力化ができました。  これで解決です。  素晴らしい・・・。   ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問