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

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

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

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

Q&A

解決済

3回答

6970閲覧

VBAでPowerPointの文字配置(内部の余白)を変更する方法が知りたい

miyu21

総合スコア111

VBA

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

0グッド

0クリップ

投稿2016/10/20 14:25

編集2016/10/20 14:30

###前提・実現したいこと
ExcelVBAで、PowerPointのスライドを操作しています。
(ExcelVBAでやっている理由は、Excelのデータを使う部分があるためです。)

PowerPointでは、文字配置の「内部の余白」は、
上下左右ともデフォルトが「0.03cm」になっています。
これを、指定した1つのオブジェクトに対し「0.05cm」の設定にしたいです。

(なお、オブジェクトの指定方法はわかっています。)

###試したこと
Webで検索しましたが、全く手がかりが見つかりませんでした。

手動でやると、文字配置の「内部の余白」の設定上で、
上下左右の全ての欄に「.05」を入力しなければなりません。
さらに、F4キーでの繰り返しを利用することができません。

どうぞよろしくお願いいたします。

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

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

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

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

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

guest

回答3

0

ベストアンサー

既読かもしれませんが、以下のサイトが参考になりそうです。
⇒参考サイト

Sub pptEdit() Dim ppApp As New PowerPoint.Application ppApp.Visible = True Dim ppPrs As PowerPoint.Presentation Set ppPrs = ppApp.Presentations.Open(ThisWorkbook.Path & "\a.pptx") Dim ppSld As PowerPoint.Slide 'スライドオブジェクト Set ppSld = ppPrs.Slides(1) '1ページ目のスライドをセット Dim ppShp As PowerPoint.Shape Set ppShp = ppSld.Shapes(1) 'テキストの操作 ppShp.TextFrame.TextRange.Text = "abcdefghij" ppShp.TextFrame.TextRange.Characters(2, 3).Font.Size = 18 '余白の設定 ppShp.TextFrame.MarginLeft = 0.5 ppShp.TextFrame.MarginRight = 0.5 ppShp.TextFrame.MarginTop = 0.5 ppShp.TextFrame.MarginBottom = 0.5 'ppApp.Quit 'Set ppApp = Nothing End Sub

投稿2016/10/21 01:29

編集2016/10/24 00:35
jawa

総合スコア3013

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

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

miyu21

2016/10/25 15:24

jawaさん、ご回答ありがとうございます。 返信が遅くなりまして、大変申し訳ありません。 試してみたのですが、「指定された値は境界を超えています」というエラーが出ました。 タイトルや普通のテキストボックスは変更できましたが、表は無理のようです。 いろいろ試し、TextRange.BoundLeft プロパティにたどり着きましたが、読み取り専用のため、値の取得しかできませんでした。 https://msdn.microsoft.com/ja-jp/library/office/ff939061.aspx コードを書き込むことができず申し訳ありません。 他にも何かございましたら、どうぞよろしくお願いいたします。
jawa

2016/10/26 01:22

表オブジェクトでしたか・・。 表オブジェクトとなると、表そのものに対する余白設定ではなく中のセルに対して余白設定する、ということになるのでしょうか。 以下のように表オブジェクト内の各セルに対しての設定することはできそうです。 ``` Dim ppShp As PowerPoint.Shape Set ppShp = ppSld.Shapes(2) Dim ppTbl As PowerPoint.Table Set ppTbl = ppShp.Table Dim ppRow As PowerPoint.Row Dim ppCell As PowerPoint.Cell For Each ppRow In ppTbl For Each ppCell In ppRow.Cells ppCell.Shape.TextFrame2.MarginLeft = 0 ppCell.Shape.TextFrame2.MarginBottom = 0 Next ppCell Next ppRow ``` 表全体への一括設定ができればラクなのでしょうが、そんなプロパティが見当たらなかったので、面倒ですがループ処理としました(^-^; お試しください。
miyu21

2016/10/27 15:01 編集

再度のご回答、ありがとうございます。 (表である旨を書き漏らしておりました。 本当に申し訳ありませんでした。) jawaさんが教えてくださったコードを実行してみたのですが、 どうしてもひとつ目のFor Eachでエラーになってしまいました。 ですが、なんとかやりたかったことを実現することができました。 本当にありがとうございました。 (コメントだとマークダウンが使えないようですので、 自己解決のところにコードを記載します。)
guest

0

jawaさんに教えていただいたコードを元に書きました。
コメントですとマークダウンが使えないため、こちらに書きます。

VBA

1Dim ppApp As PowerPoint.Application 2Dim ppSld As PowerPoint.Slide 3Dim ppShp As PowerPoint.Shape 4Dim i As Integer 5Dim j As Integer 6 7Set ppApp = CreateObject("PowerPoint.Application") 8Set ppSld = ppApp.ActivePresentation.Slides(1) 9Set ppShp = ppSld.Shapes(3) 10 11With ppShp 12 If .HasTable Then 13 For i = 1 To .Table.Columns.Count 14 For j = 1 To .Table.Rows.Count 15 With .Table.Cell(j, i).Shape.TextFrame2 16 .MarginLeft = 1.5 17 .MarginRight = 1.5 18 .MarginTop = 1.5 19 .MarginBottom = 1.5 20 End With 21 Next j 22 Next i 23 Else 24 MsgBox "表ではありません" 25 End If 26End With

投稿2016/10/27 15:02

編集2016/10/31 12:48
miyu21

総合スコア111

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

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

0

ShapeオブジェクトのTextFrame2.MarginLeft、MarginRight、MarginTop、MarginBottomで変更できませんか?

投稿2016/10/20 16:50

q1701

総合スコア274

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

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

miyu21

2016/10/25 15:26

q1701さん、ご回答ありがとうございます。 返信が遅くなりまして、大変申し訳ありません。 jawaさんの返信の方にも書きました通り、うまくいきませんでした。 引き続き、何か情報がありましたら、どうぞよろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問