Microsoft 365 WordのVBAに関する覚書きです。
チップス
- 配列のFor Each(
For Each A In B()
)でAはVariant
型固定。Dim A As B
とすると実行時エラーが発生する。 - Wordの図は行内にある場合は
InlineShape
型。取得する場合もActiveDocument.InlineShapes
になる。Type
はWdInlineShapeType
型。Shape
型、ActiveDocument.Shapes
、MsoShapeType
ではない。
関数
アクティブな文書に存在するすべての図(行内図)の直後に改行を2個追加するプロシージャ
'アクティブな文書に存在するすべての図(行内図)の直後に改行を2個追加します。
'実行後は選択範囲がリセットされます。
Sub AddTwoNewLinesAfterAllPictureShapes()
Dim PictureShapes() As InlineShape
PictureShapes = FilterInlneShapesTypeOf( _
ActiveDocument.InlineShapes, wdInlineShapePicture)
Dim PictureShape As Variant
For Each PictureShape In PictureShapes
PictureShape.Select
Selection.MoveRight wdCharacter, 1
Selection.TypeParagraph
Selection.TypeParagraph
Next
End Sub
FilterInlneShapesTypeOf
を使用します。
アクティブな文書に存在するすべての図(行内図)の直後に改行とページ区切りを追加するプロシージャ
'アクティブな文書に存在するすべての図(行内図)の直後に改行とページ区切りを追加します。
'実行後は選択範囲がリセットされます。
Sub AddNewLineAndPageBreakAfterAllPictureShapes()
Dim PictureShapes() As InlineShape
PictureShapes = FilterInlneShapesTypeOf( _
ActiveDocument.InlineShapes, wdInlineShapePicture)
Dim PictureShape As Variant
For Each PictureShape In PictureShapes
PictureShape.Select
Selection.MoveRight wdCharacter, 1
Selection.InsertParagraph
Selection.InsertBreak wdPageBreak
Next
End Sub
FilterInlneShapesTypeOf
を使用します。
ShapeのコレクションをShape()型に変換する関数
'ShapeのコレクションをShape()型に変換します。
'コレクションがShapeに変換できないオブジェクトを含む場合はエラーが発生します。
Public Function ConvInlineShapeCollectionToArray( _
ByRef Collection As Collection, _
Optional ByVal StartIndex = 1) As InlineShape()
Dim Shapes() As InlineShape
ReDim Shapes(StartIndex To Collection.Count + StartIndex - 1)
Dim I As Integer
For I = 1 To Collection.Count
Set Shapes(StartIndex + I - 1) = Collection(I)
Next
ConvInlineShapeCollectionToArray = Shapes
End Function
InlineShapesからある種類のInlineShapeオブジェクトの配列を作成する関数
'InlineShapesからある種類のInlineShapeオブジェクトの配列を作成します。
Public Function FilterInlneShapesTypeOf( _
ByRef InlineShapes As InlineShapes, _
ByVal ShapeType As WdInlineShapeType) As InlineShape()
Dim Col As Collection
Set Col = New Collection
Dim InlineShape As InlineShape
For Each InlineShape In InlineShapes
If InlineShape.Type = ShapeType Then
Col.Add InlineShape
End If
Next
FilterInlneShapesTypeOf = ConvInlineShapeCollectionToArray(Col)
End Function
ConvInlineShapeCollectionToArray
を使用します。