オブジェクト
各クラス,メソッド,プロパティは,オブジェクトブラウザ (ctrl cmd b)で調べられます.
グレーの四角いのはプロパティ.
緑が飛んでるアイコンはメソッド.
いくつかのクラスのプロパティ,メソッドは,グローバルで呼び出せる.
オブジェクトの代入
Setが必要なことに注意.
Set obj = Object
オブジェクトブラウザ
オブジェクトの簡易辞書みたいなもの.
リボンでは段ボールのやつ.
引数における列挙型の確認はこれで十分.
ヘルプ(人間作成)と違っていたら,こちらを優先した方がいいかも.
アイコンについて:
赤青黄の点:オブジェクト
グレーの手:プロパティ (ver. 2013では青い四角)
飛んでる緑:メソッド
青:オブジェクトの規定メンバ
生ゴミ:モジュール
黄色い四角x2:列挙型
灰色の四角:定数
図形オブジェクト Shape
追加する関係はShapesにて説明する。
書式をコピー&ペーストする
Slide.Shapes(1).PickUp
Slide.Shapes(2).Apply
図形を削除する
Shape.Delete
returns:
Null?
選択する
Shape.Select(Replace=msoTrue)
Replace:
msoTriState.
選択範囲に追加する:msoFalse
選択範囲を置き換える:msoTrue
拡大・縮小する
Shape.ScaleWidth(Factor, RelativeToOrginalSize, fScale=msoScaleFromTopLeft)
Shape.ScaleHeight(Factor, RelativeToOrginalSize, fScale=msoScaleFromTopLeft)
Factor As Single:
倍率.10%なら1.1を指定.
RelativeToOrginalSize As MsoTriState:
元のサイズに対して拡大・縮小するか.
現在のサイズをもとにする場合はmsoFalseを指定.
fScale As MsoScaleFrom:
どこを固定するか.
右下:msoScaleFromBottomRight
中央:msoScaleFromMiddle
左上:msoScaleFromTopLeft
前後関係を移動させる
Shape.ZOrder(ZOrderCmd)
ZOrderCmd
msoZOrderCmd
msoBringToFront (= 0)
msoSendToBack (= 1)
msoBringForward (= 2)
msoSendBackward (= 3)
msoBringInFrontOfText (= 4) (wordのみ)
msoSendBehindText (= 5) (wordのみ)
例:最背面から3個目にする
Set myDocument = ActivePresentation.Slides(1)
With myDocument.Shapes.AddShape(msoShapeOval, 100, 100, 100, 300)
While .ZOrderPosition > 4
.ZOrder msoSendBackward
Wend
End With
位置と大きさ
位置はスライドの上/左からの値。ポイント単位。
Shape.Top
Shape.Left
Shape.Width
Shape.Height
戻り値
Single
ポイントについて
Excelなら、ApplicationオブジェクトにCentimetersToPoints(arg)が使えるかもしれない。パワポはない。
https://www.ddc.co.jp/words/archives/20090701114500.htmlによると、印刷物を扱うソフト(Desktop Publishing; DTP)では、1 pt. = 1 inch/72と定義されることが多い。
JISやアメリカ式ポイントだと、1 pt. = 0.3514 mmと定義される。
なお、
Shapeの種類
Shape.Type As msoShapeType
ブレースホルダー
・図形(挿入するやつ):msoAutoShape (1)
吹き出し??図形の吹き出しは図形カテゴリ:msoCallout (2)
グラフ:msoChart (3)
コメント:msoComment (4)
・フリーフォーム,頂点変更した場合:msoFreeform (5)
・グループ:msoGroup (6)
埋め込み OLE オブジェクト:msoEmbeddedOLEObject (7)
フォーム コントロール:msoFormControl (8)
・直線:msoLine (9)←矢印で挿入した場合はこれではなく、図形(:msoAutoShpae (1))判定。直線を矢印にした場合はこれ。
リンク OLE オブジェクト:msoLinkedOLEObject (10)
リンク画像:msoLinkedPicture (11)
OLE コントロール オブジェクト:msoOLEControlObject (12)
・画像:msoPicture (13)
プレースホルダー:msoPlaceholder (14)
テキスト効果:msoTextEffect (15)
メディア:msoMedia (16)
・テキスト ボックス:msoTextBox (17)
スクリプト アンカー:msoScriptAnchor (18)
・表:msoTable (19)
Canvas:msoCanvas (20)
ダイアグラム:msoDiagram (21)
インク:msoInk (22)
インク コメント:msoInkComment (23)
SmartArt グラフィック:msoIgxGraphic (24)
Slicer:msoSlicer (25)
Web ビデオ:msoWebVideo (26)
コンテンツ Office アドイン:msoContentApp (27)
グラフィック:msoGraphic (28)
リンクされたグラフィック:msoLinkedGraphic (29)
3D モデル:mso3DModel (30)
リンクされた 3D モデル:msoLinked3DModel (31)
図形の種類の組み合わせ:msoShapeTypeMixed (-2)
例:テキストボックスかを判定する
If Shape.Type = msoTextBox
図形の種類
Shape.AutoShapeType
184種類.https://learn.microsoft.com/en-us/office/vba/api/office.msoautoshapetype
その他の図形(-2)があるが,これを代入すると無限ループ.
なお,挿入方法によって,値が異なる場合がある.
プレースホルダー(スライドのスタイルのコンテンツ部分のアイコンから挿入できる)から挿入する場合と挿入タブから挿入する場合で異なる.
代表的なやつ:
直線:msoShapeMixed (-2) (その他の状態)
四角形,テキストボックス,画像:msoSHapeRectangle (1)
右矢印:msoShapeRightArrow (33)
下矢印:msoShapeDownArrow (36)
頂点編集したもの (Not supported):msoShapeNotPrimitive (138)
グループの要素
Shape.GroupItems
グループ内の最小要素群を得られる。
グループをグループ化した場合、グループとしての要素は得られない。
テキスト関係
Shape.TextFrame
Shape.TextFrame2 (マスターテキストを含まないread only)
二つあって,違いはよくわからない.
戻り値:
TextFrameオブジェクト
TextFrame2オブジェクト(2は2007から,少し優位)
名前
Shape.Name
戻り値:
String
アスペクト比
Shape.LockAspectRratio
returns As MsoTriState:
固定する:msoTrue
固定しない:msoFalse
角度
Shape.Rotation
returns:
Single
0 ≤ shp.Rotation < 360の値.
値の入力ができるはずだけど,一度Shape.Rotaionの形式で代入しないと無理だった.
shp.rotation = shp.rotation
shp.rotatoin = 45
入力は負の値でも360以上でも可能.
反転(直線,矢印の向き)
Shpae.HorizontalFlip
Shpae.VerticalFlip
読み取り専用.
returns:
msoTriState
左上 -> 右下の方向が正になっている.
そうでない場合は反転になっている:msoTrue.
頂点
Shape.Nodes
returns:
ShapeNodesコレクション
各コンテンツの種類
Shape.HasChart ' グラフ
Shape.HasTable ' 表
Shape.HasSmartArt
Shape.HasTextFrame ' テキストの入力が可能
Shape.Connector ' コネクタ (Has要らず)
returns As MsoTriState:
真:msoTrue
偽:msoFalse
グループ内にグラフがある状態でも そのグループのHasChartの値はFalse.
Hasではなく,Isの方が適していると考えれらる.
コネクタの判定と関する設定
Shape.Connector
shape.ConnectorFormat
戻り値
msoTriState,ConnectorFormatオブジェクトが返ってくる
図形の枠線に関する設定
Shape.Line
戻り値: LineFormat
LineFormatオブジェクトを取得できる.
図形の塗りつぶしに関する設定
Shape.Fill
戻り値
FillFormatオブジェクト。
例:塗りつぶし無し
Shape.Fill.Visible = msoFalse
線に関する設定
Shpae.Line
returns:
LineFormatオブジェクト.
影に関する設定
Shape.Shadow
戻り値
ShadowFormatオブジェクト
文字を入力できるフラグ
Shape.HasTextFrame
最背面からの位置
Shape.ZOrderPosition
読み取り専用。
戻り値
Long
最背面のものが1、最前面がShapes.Count。
図形オブジェクトのコレクション Shapes
https://learn.microsoft.com/ja-jp/office/vba/api/powerpoint.shapes
スライドの下側にあるものから格納されてる.
現在のスライドのshapesを取得するには、ActiveWindow.View.Slide.Shapes
プレースホルダーコレクション
Shapes.Placeholders
プレースホルダーのShapeが集められてる.
タイトルが欲しい場合,Shapesコレクションにタイトルプロパティがあるのでそちらを使う.
なお,フッターに関してはプレースホルダーであるがこのコレクションではなく,HeadersFootersオブジェクトがある.
タイトルの有無(プレースホルダー)
Shapes.HasTitle
returns:
msoTriState
タイトル(プレースホルダー)
Shapes.Title
タイトルがない場合エラーになる.
returns:
タイトルのShapeオブジェクト.
ShapeRangeオブジェクトを取得する
Shapse.Range (index)
Shapes.Range(Array(1,3)) '図形1と図形3
index
図形のインデックス (Integer),図形の名前 (String),いずれかの行列 (Array).
省略した場合,全ての図形のShapeRangeオブジェクトを返却.
なお,一つの図形に関して扱う場合は,このメソッド(Shapes.Range(1) etc.)を使わずに,Shapes(1)とすれば良い。
指定したNameをもつShapeを取得する
メソッドではないが、よく使いそうなので記載。
Dim shp_tmp As shape, shp As shape
For Each shp_tmp In ActiveWindow.Presentation.SlideMaster.Shapes
If shp_tmp.Name = "hoge" Then
Set shp = shp_tmp
Exit For
End If
Next shp_tmp
If shp Is Nothing Exit Sub
Debug.print shp.Name
テキストボックスを追加する
Shpaes.AddTextbox(Orientation, Left, Top, Width, Height)
Orientation As msoTextOrientation:
テキストの方向.
横方向:msoTextOrientationHorizontal (1)
上向き:msoTextOrientationUpward (2)
下向き:msoTextOrientationDownward (3)
縦:msoTextOrientationVertical (5)
アジア用の縦方向もある.
https://learn.microsoft.com/en-us/office/vba/api/office.msotextorientation
Lef, Topt AS Single:
位置 (pt).
Width, Height As Single:
幅,高さ (pt).
returns:
Shape
例:
Sub AddTextbox()
Dim textbox As Shape
Set textbox = ActiveWindow.Selection.SlideRange(1).Shapes.AddTextbox( _
msoTextOrientationHorizontal, _
ActiveWindow.Presentation.PageSetup.SlideWidth / 2, _
ActiveWindow.Presentation.PageSetup.SlideHeight / 2, 0, 0)
textbox.TextFrame.DeleteText
textbox.TextFrame.TextRange.Select
textbox.textframe.TextRange.Font.Size = 16
End Sub
線を追加する
Shapes.AddLine(BeginX, BeginY, EndX, EndY)
BeginX, BeginY, EndX, EndY
始点の左・上からの距離、終点の左・上からの距離 (pt)。
戻り値
Shape
例
図形を追加する
Shapes.AddShape(Type, Left, Top, Width, Height)
Type
MsoAutoShapeType。図形の種類。下記に各図形と名称を記載。
184種類.https://learn.microsoft.com/en-us/office/vba/api/office.msoautoshapetype
Left, Top, Width, Height
左,上からの距離 (pt).幅,長さの距離.{pt}
例:
四角:
円:
8-point星:msoShape8pointStar (= 93)
折れ線を追加する
Shapes.AddPolyline(SafeArrayOfPoints)
SafeArrayOfPoints As Variant:
折線の頂点の座標値(左からの距離,上からの距離)の配列.
閉じた多角形にするには,始点と終点を同じ座標軸にする.(塗りつぶされる)
returns:
Shape
例:三形を作る
Dim triArray(1 To 4, 1 To 2) As Single
triArray(1, 1) = 25
triArray(1, 2) = 100
triArray(2, 1) = 100
triArray(2, 2) = 150
triArray(3, 1) = 150
triArray(3, 2) = 50
triArray(4, 1) = 25
triArray(4, 2) = 100
Set myDocument = ActivePresentation.Slides(1).Shapes.AddPolyline SafeArrayOfPoints:=triArray
Arrayの頂点の指定はもっと簡単な方法があるかも.
コネクタを追加する
Shape.AddConnector(Type, BeginX, BeginY, EndX, EndY)
Type As MsoConnectorType:
直線コネクタ:msoConnectorStraight (1)
エルボ コネクタ:msoConnectorElbow (2)
曲線コネクタ:msoConnectorCurve (3)
その他:msoConnectorTypeMixed (-2)
BeginX, BeginY, EndX, EndY As Single:
コネクタの始点の左,上から距離,コネクタの終点の左,上からの距離 (pt).
returns:
Shape
画像を追加する
Shape.AddPicture(FileName, LinkToFile, SaveWithDocument, Left, Top, Width, Height)
FileName As String:
ファイル名.絶対パスじゃないとダメかも.
LinkToFile As MsoTriState, SaveWithDocument:
画像がファイル内に保存されるかだと思う.
どちらもmsoTrueでいいと思う.
Left, Top:
左,上からの距離.
Width, Height:
幅,高さ.縮小,拡大される.
returns:
Shape
表を追加する
Shpaes.AddTable(NumRows, NumColumns, Left, Top, Width, Height)
NumRows, NumColumns As Long:
表の行・列数.
Left, Top As Single:
左,上からの位置 (pt).
Width, Height As Single:
表の幅,高さ (pt).
returns:
Shapeオブジェクト.
複数の図形を扱うオブジェクト ShapeRange
https://learn.microsoft.com/ja-jp/office/vba/api/powerpoint.shaperange
選択中のオブジェクト
ActiveWindow.Selection.ShapeRange
整列する
ShapeRange.Align(AlignCmd, RelativeTo)
AlignCmd As msoAlignCmd:
整列の種類.
左揃え:msoAlignLefts (0)
左右中央揃え:msoAlignCenters (1)
右揃え:msoAlignRights (2)
上揃え:msoAlignTops (3)
上下中央揃え:msoAlignMiddles (4)
下揃え:msoAlignBottoms (5)
RelativeTo As msoState:
図形でなく,スライドに揃える.
削除する
ShapeRange.Delete
グループにする
ShapeRange.Group
例:選択中の図形をグループにする
ActiveWindow.Selection.ShapeRange.Group.select
要素
ShapeRange.Item(index)
index
取り出すShapeオブジェクトののインデックス。1基底。
既定メンバ。
格納されるのは選択した(クリックした)順。
同時に複数を選択した(ドラッグで選択した)場合は下にある順で格納されている。
オブジェクトの数
ShapeRange.Count
返却値:
Long
回転角度
ShapeRange.Rotation
返却値:
Single
枠線の書式設定オブジェクト LineFormat
https://learn.microsoft.com/en-us/office/vba/api/powerpoint.lineformat (2022年9月)
Shape.Lineで取得できる。
線無し
LineFormat.Visible
msoFalse/msoTrueで指定する。
色
LineFormat.ForeColor
背景色もあるみたい(?)
戻り値
ColorFormatオブジェクト.
幅
LineFormat.Weight
矢印
LineFormat.BeginArrowheadLength
LineFormat.BeginArrowheadWidth
LineFormat.BeginArrowheadStyle
LineFormat.EndArrowheadLength
LineFormat.EndArrowheadWidth
LineFormat.EndArrowheadStyle
実線・点線/一重線・多重線
LineFormat.DashStyle
LineFormat.Style
returns:
MsoLineDashStyle:
msoLineSolid (= 1)
msoLineSquareDot (= 2)
msoLineRoundDot (= 3)
msoLineDash (= 4)
msoLineDashDot (= 5)
msoLineDashDotDot (= 6)
msoLineLongDash (= 7)
msoLineLongDashDot (= 8)
msoLineLongDashDotDot (= 9)
msoLineSysDot (= 10)
msoLineSysDash (= 11)
msoLineSysDashDot (= 12)
色
LineFormat.ForeColor
LineFormat.Pattern
戻り値
ColorFormat
例:アクセント 5
msoThemeColorAccent5 (= 9)
透明度
LineFormat.Transparency
太さ
LineFormat.Weight
戻り値
Single
影の書式設定オブジェクト ShadowFormat
影の種類
ShadowFormat.Type
戻り値
テキストフレームオブジェクト TextFrame
(公式ドキュメント:TextFrame2 オブジェクト (PowerPoint) | Microsoft Learn)
テキストのレイアウトに関するオブジェクト。
2007年からTextFrame2が導入された。2の方が上位互換?
以降の説明では、基本的にTextFrame2の説明とする。
垂直方向の配置(上/中央/下揃え)
TextFrame.VerticalAnchor
文字列の方向(水平/垂直)
TextFrame.Orientation
自動調整(なし,はみ出しの場合のみ,テキストに合わせる)
TextFrame.AutoSize
余白
TextFrame.MarginLeft
TextFrame.MarginRight
TextFrame.MarginTop
TextFrame.MarginBottom
図形内でテキストの折り返し
TextFrame.WordWrap
返却値
msoFlase: 折り返ししない
msoTrue: 折り返す
フレーム内のテキストのオブジェクト
TextFrame.TextRange
戻り値
TextRangeオブジェクト
テキスト削除
TextFrame.DeleteText
文字列の有無
TextRange.HasTextFrame
戻り値
MsoTriState (msoFalse/msoTrue)
テキストを処理するオブジェクト TextRange
https://learn.microsoft.com/ja-jp/office/vba/api/powerpoint.textrange
テキスト
TextRange.Text
戻り値
String
文字数
TextRange.Length
x
フォント
TextRange.Font
戻り値
Fontオブジェクト
段落書式
TextRange.ParagraphFormat
戻り値
ParagraphFormatオブジェクト
文字の高さ/幅・位置
TextRange.BoundHeight
TextRange.BoundWidth
TextRange.BoundLeft
TextRange.BoundTop
読み取り専用.
テキストボックスの大きさではなく,余白=0地点と思われる.
余白0であっても若干の余白がある.大体フォントサイズ * 0.01 cmくらい.
これテキストボックスが回転した場合,回転後の位置を示す(Shape.Top等は回転しても回転前が適用される).
戻り値
Single
ポイント単位.
文字の位置
TextRange.BoundLeft
TextRange.BoundTop
読み取り専用.
テキストボックスではなく,純粋に文字との距離.
戻り値
Single.
ポイント単位.
文字列の選択
TextRange.Select
文字列のコピー/ペースト
TextRange.Copy
TextRange.Paste
クリップボードにコピーされる.
テキストを削除する
TextRange.Delete
テキストを前/後に挿入する
TextRange.InsertBefore(new_text)
TextRange.InsertAfter(new_text)
スライド番号を追加する
TextRange.InsertSlideNumber
スライドマスターでおこなうと、スライド番号を表す<#>
を挿入できる。
TextRange.Textに、ただ"<#>"の文字列を代入するだけだと、スライド番号に変更されず<#>のまま表示されてしまうので、このメソッドが必要。
なお、既に文字があるTextRangeに挿入する場合は、末尾に挿入される。
文字列の検索
TextRange.Find
文字列の置換
TextRange.Replace
前後の空白を削除する
TextRange.TrimText
戻り値
TextRange
例
With Application.ActivePresentation.Slides(1).Shapes(2) _
.TextFrame.TextRange
With .InsertBefore(" Text to trim ")
MsgBox "Untrimmed: " & """" & .Text & """"
MsgBox "Trimmed: " & """" & .TrimText.Text & """"
End With
End With
??機能していない??
Trim関数が用意されているのでそれを使うとよい。