0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Microsoft 365 WordのVBA覚書き

Last updated at Posted at 2020-09-13

Microsoft 365 WordのVBAに関する覚書きです。

チップス

  • 配列のFor Each(For Each A In B())でAはVariant型固定。Dim A As Bとすると実行時エラーが発生する。
  • Wordの図は行内にある場合はInlineShape型。取得する場合もActiveDocument.InlineShapesになる。TypeWdInlineShapeType型。Shape型、ActiveDocument.ShapesMsoShapeTypeではない。

関数

アクティブな文書に存在するすべての図(行内図)の直後に改行を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を使用します。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?