初めて自分の家と他人の家が違う、と意識した時

PowerpointVBAでPowerpointスライドに貼った画像を上下、左右センタリングしたいのですが、下記をどう改造すれば良いでしょうか?


---<start of code>--
Sub graph_size_adjust()

With ActiveWindow.Selection.ShapeRange
.LockAspectRatio = msoTrue '縦横比を固定
'.Height = '画像の高さ 縦横比を固定なので不要、Heightで指定の場合Width不要
.Width = 400 '画像の幅 単位はピクセルのため、cmに変換したい場合は 0.03527778 で割ること。
.Top = 200 'スライド上からの距離  単位はピクセルのため、cmに変換したい場合は 0.03527778 で割ること。
.Left = 100 'スライド左からの距離  単位はピクセルのため、cmに変換したい場合は 0.03527778 で割ること。
End With

End Sub
---<end of code>--

A 回答 (3件)

連投申し訳ありません。


#2で不要なコードの削除を忘れ、さらにご質問にないコードを加えてしまって
判り難くしてしまいました。
ご質問の場合、
Sub graph_size_adjust()
  With ActiveWindow.Selection
    .ShapeRange.LockAspectRatio = msoTrue  '縦横比を固定
    '.ShapeRange.Height = '画像の高さ 縦横比を固定なので不要、Heightで指定の場合Width不要
    .ShapeRange.Width = 400  '画像の幅 単位はピクセルのため、cmに変換したい場合は 0.03527778 で割ること。
    .ShapeRange.Left = (.SlideRange.Master.Width - .ShapeRange.Width) / 2
    .ShapeRange.Top = (.SlideRange.Master.Height - .ShapeRange.Height) / 2
  End With
End Sub
となります。

一連のご質問の回答で混乱させてしまっているかも、と思い
再回答しました。
不明な点があれば、補足などでご質問ください。

下記は、ついでにと言うと失礼かもしれませんが、参考に成ればと思います。

Powerpointに限ったことではないと思いますが、Shapeオブジェクトを特定(対象に)する場合、
Selection <選択している>、Shapes(1)<オブジェクトのインデックス>
Shapes("名前") <オブジェクトの名前> などで指定する方法があります。
インデックスや名前を使用する場合は、スライドを明示するようにします。
例:ActivePresentation.Slides(1).Shapes("hoge")
アクティブなプレゼンテーションの初めの(インデックス1)スライドのhogeと言う
名前のShapeオブジェクト を指します。
    • good
    • 0

投稿後気が付きました。


>下記をどう改造すれば良いでしょうか
改造でしたね。(付け加えた部分(If~)もありますが、不要であれば削除してください)

Sub graph_size_adjust()
  With ActiveWindow.Selection
    .ShapeRange.LockAspectRatio = msoTrue  '縦横比を固定
    '.ShapeRange.Height = '画像の高さ 縦横比を固定なので不要、Heightで指定の場合Width不要
    .ShapeRange.Width = 400  '画像の幅 単位はピクセルのため、cmに変換したい場合は 0.03527778 で割ること。
    'Shapeの巾もしくは高さがスライドサイズを超える場合、スライドサイズの該当方向80%に合わせる(不要かも知れませんが)
    If .SlideRange.Master.Width < .ShapeRange.Width Then .ShapeRange.Width = .SlideRange.Master.Width * 0.8
    If .SlideRange.Master.Height < .ShapeRange.Height Then .ShapeRange.Height = .SlideRange.Master.Height * 0.8
    .ShapeRange.Top = 200  'スライド上からの距離  単位はピクセルのため、cmに変換したい場合は 0.03527778 で割ること。
    .ShapeRange.Left = 100  'スライド左からの距離  単位はピクセルのため、cmに変換したい場合は 0.03527778 で割ること。

    .ShapeRange.Left = (.SlideRange.Master.Width - .ShapeRange.Width) / 2
    .ShapeRange.Top = (.SlideRange.Master.Height - .ShapeRange.Height) / 2
  End With
End Sub
    • good
    • 0

こんにちは、


.Selectionなので同じような感じで
Shapeを選択する必要がありますが、

Sub Sample()
  With ActiveWindow.Selection
  'Selectionエラー(不明のメンバー回避のため)Shapeを選択していない場合処理を終了します
    If .Type = ppSelectionNone Or .Type = ppSelectionSlides Then
      MsgBox "Shapeを選択してください。"
      Exit Sub
    End If
    'スライドのセンターへ移動(メインコードは2行です)
    .ShapeRange.Left = (.SlideRange.Master.Width - .ShapeRange.Width) / 2
    .ShapeRange.Top = (.SlideRange.Master.Height - .ShapeRange.Height) / 2
  End With
End Sub
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!