テキストと多くの写真を含む大きなWorddocxファイルがあります。すべての写真に一度にボーダー/フレームスタイルを適用したいと思います。私はすべての写真に対して個別にそれをしたくありません。
したがって、マクロが進むべき道だと思いますが、Wordマクロの作成にはあまり精通していません。これが始まりだと思いますが、設定を<hr>
要素に適用しようとするとエラーが発生します。
これが私が使用したマクロコードです。ほんの少しの微調整で修正できると思います(すべての画像オブジェクトに対してコードを実行できるようにします)。
Sub addborder()
'
' addborder Macro
'
'
Dim i As Long, j As Long
With ActiveDocument.Range
For i = 1 To .InlineShapes.Count
With .InlineShapes(i)
For j = 1 To .Borders.Count
.Borders(j).LineStyle = wdLineStyleSingle
.Borders(j).Color = wdColorAutomatic
Next j
End With
Next i
End With
End Sub
ありがとう。
追加:
ドキュメントの内部に<hr>
があり、その要素がマクロを停止していることに注意してください(これらのパラメーターを<hr>
要素に適用することはできません)。したがって、マクロは画像画像のみを選択する必要があります。
そのコードを機能させるには、Word文書内のすべての画像を「テキストに合わせて」としてフォーマットする必要があります。ドキュメントテキストを他の方法で画像に折り返すと、InlineShapeオブジェクトではなく VBA Shape Object になります。
また、Bordersオブジェクトには4つの辺すべてが含まれます。 2番目のFor ... Nextステートメントで4を4回ループして、両側のスタイルと色を設定する必要はありません。
最後に、デフォルトの幅サイズに設定したときに、境界線が写真で見づらくなったということです。 Linewidthプロパティを設定して、機能しているかどうかを確認することもできます。
Office 2007では、これは私にとってはうまくいきます。
Dim i As Long, j As Long
With ActiveDocument.Range
For i = 1 To .InlineShapes.Count
With .InlineShapes(i)
.Borders(1).LineStyle = wdLineStyleSingle
.Borders(1).Color = wdColorAutomatic
' optional .Borders(1).LineWidth = wdLineWidth225pt
End With
Next i
End With
編集:
<hr>
エラーについて。すべてのInlineShapeオブジェクトが画像であるとは限りません。タイプがPictureであるInlineShapesのみを選択するように、VBAコードで指定できます。
これが、オブジェクトをすべて「InlineShape-s」でグループ化するのではなく、「InlineShape」として直接参照することを好む理由です。 InlineShape-sを使用して「Type」プロパティに簡単にアクセスすることはできません。
Dim inshape As InlineShape
Dim ashape As shape
For Each inshape In ActiveDocument.InlineShapes
If inshape.Type = wdInlineShapePicture Then
inshape.Borders(1).LineStyle = wdLineStyleSingle
inshape.Borders(1).Color = wdColorAutomatic
'optional inshape.Borders(1).LineWidth = wdLineWidth225pt
End If
Next
'The second loop will look for pictures formatted as Shape objects
For Each ashape In ActiveDocument.Shapes
If ashape.Type = msoPicture Then
ashape.Line.Style = msoLineSingle
ashape.Line.Weight = 0.5 'default size is 0.5 pts'
End If
Next
私はこの質問に対するCathyの答えが本当に好きですが、周囲の線を取得するために必ずしもBorders
のInlineShape
メンバーを使用する必要はないことを付け加えたいと思います。 Line
メンバーは、通常のShape
の場合と同じように、次のようになります。
Option Explicit
Sub PicturesAll_Borders_Show()
'for pictures which are "In Line with Text"
Dim inShp As InlineShape
For Each inShp In ActiveDocument.InlineShapes
If inShp.Type = wdInlineShapePicture Then
With inShp.Line
.Visible = True
.Style = msoLineSingle
.Weight = 1
.ForeColor.RGB = RGB(0, 0, 0)
End With
End If
Next inShp
'for pictures which are "With Text Wrapping"
Dim shp As Shape
For Each shp In ActiveDocument.Shapes
If shp.Type = msoPicture Then
With shp.Line
.Visible = True
.Style = msoLineSingle
.Weight = 1
.ForeColor.RGB = RGB(0, 0, 0)
End With
End If
Next shp
End Sub
また、後で見つけた人が必要になった場合に備えて、すべての写真の境界線を非表示にする簡単な方法を作成しました。
Sub PicturesAll_Borders_Hide()
'for pictures which are "In Line with Text"
Dim inShp As InlineShape
For Each inShp In ActiveDocument.InlineShapes
If inShp.Type = wdInlineShapePicture Then inShp.Line.Visible = False
Next inShp
'for pictures which are "With Text Wrapping"
Dim shp As Shape
For Each shp In ActiveDocument.Shapes
If shp.Type = msoPicture Then shp.Line.Visible = False
Next shp
End Sub