【WordVBA】複数の画像をWordの複数ページに貼り付ける方法

WordVBA

前回は複数の画像をExcelの複数のシートに貼り付ける方法をご紹介しました。

今回は複数の画像をWordの複数のページに貼り付ける方法をご紹介します。

ではさっそくやっていきましょう!

手順① プログラム画面の表示

こちらはExcelの場合と同様の手順になりますので、こちらを参考にしましょう。

【ExcelVBA】プログラミングする方法
Excelには業務効率化のための強力プログラミング言語が搭載されています。この記事ではそのプログラミング言語を使用するための方法を分かりやすく丁寧にご紹介します。

手順② プログラムのコピーと貼り付け

こちらのプログラムをWordのVBA画面に貼り付けてください。

解説

‘ 貼り付ける画像が格納されているフォルダを選択します
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = True Then
‘ 取得したフォルダパスを変数に入れる
folderPath = .SelectedItems(1)
End If
End With

まずこの部分では、画像が入ったフォルダをユーザに選択させるための画面を表示させています。

ユーザがOKを押した場合はTrue(-1)となるため、画像のフォルダパスを取得します。

‘ フォルダ内の画像パスを格納する配列を用意します
Dim imagePath() As Variant
ReDim imagePath(0)

フォルダ内には画像が複数格納されているため、画像一枚一枚のパスを格納するための変数が必要です。

複数の値を入れるためには配列が必要になります。

Dim imagePath() As Variant では配列を宣言しています。

通常 imagePath() の () の中には配列の長さを指定します。例えば imagePath(100) などです。

しかし今回の場合は、画像が何枚あるかわかりません。つまり、配列の長さを何にすればいいかがわかりません。

ですので () の中身は空にしているのです。

ReDim imagePath(0) では配列の再定義しています。Re(再び)Dim(定義)でReDimです。

imagePath(0) の ()の中身は0としています。これは配列の長さが1という意味です。なぜなら、

配列のインデックスは 0 から始まるからです。例えば次のようなイメージで配列を宣言しました。

配列の長さを3つにしたい場合は imagePath(2) とします。次のようなイメージです。

‘ 1枚目の画像パスを配列に入れます
imagePath(0) = Dir(folderPath & “\”)

Dir(folderPath & “\”) では最初にユーザが選択したフォルダの中身のファイル名を1つ取得します。

次のようなイメージです。

それを先ほどの配列に入れています。

‘ 配列の画像パスのインデックス
idx = 0

  ‘ フォルダ内の画像の枚数分繰り返す
Do While imagePath(idx) <> “”
‘ 配列に画像のパスを格納する
idx = idx + 1
‘ 配列を再定義します
ReDim Preserve imagePath(idx)
‘ 配列に画像のパスを格納します
imagePath(idx) = Dir()
Loop

Do While imagePath(idx) <> “” とは配列 imagePath() が空白でない間はループ処理を繰り返すという意味です。最初に配列のインデックスidxに 0 を入れており imagePath(0) には画像①.pngが入っています。

idx = idx + 1 でインデックスを増やしています。これは次の画像を配列に入れるためです。

ReDim Preserve imagePath(idx) で配列の長さを1つ増やしています。最初 idx は 0 にしましたが 1行上の idx = idx +1 で 1つ増やしており idx は 1 の状態です。

ですので ReDim Preserve imagePath(1) が実行されます。

さらに、Preserve というキーワードがついています。これは保存という意味です。このキーワードを付けることにより、配列に入れた値は保存されたまま、配列の長さを変更しています。

つまり次のようなイメージです。

imagePathという配列の長さが変更できました。

imagePath(idx) = Dir() で先ほど増やした配列に次の画像を入れます。

Dir() は()内を省略すると、前回の条件 Dir(folderPath & “\”) と同じものが指定されたとみなされます。

また、すでに取得したファイル名とは別のファイル名が返されます

つまり imagePath(idx) = Dir() で全てのファイル名を取得したら imagePath(idx) に空白が設定されループが終了します。

ループ終了時点で配列は以下の通りになっています。

For i = 0 To UBound(imagePath) – 1

今度は配列に入れた画像のファイル名をひとつづつ取り出していきます。

ですので i を 0 から 配列の長さ – 1 まで 1ずつ増やしていきます。

今回の例では UBound(imagePath) は 13 になります。imagePath(0)~imagePath(12)まで 13個あるからです。

しかし配列の最後は imagePath(12) のため、UBound(imagePath) – 1 として 最後が12 になるようにしています。

‘ 画像の貼り付け
ActiveDocument.Shapes.AddPicture FileName:=folderPath & “\” & imagePath(i)

ここでWordに画像を挿入しています。

新規でWordを起動した場合、1ページ目がアクティブドキュメントとなっています。

ここに FileName:=folderPath & “\” & imagePath(i) で指定したファイルを挿入しています。

最初は i = 0 のため、folderPath & “\” & imagePath(0) の画像が挿入されます。

これは最初に選択した フォルダのパス\画像①.png です。

画像が挿入された結果は次の通りです。

‘ ページの挿入
ActiveDocument.Range.InsertAfter Chr(12)

ここでWordに新しいページを挿入しています。

Wordの改ページの文字コードは 12 で、Chr(12)を指定すればページが追加できます。

‘ 最終ページに移動
Selection.GoTo What:=wdGoToPage, Which:=wdGoToFirst, Count:=ActiveDocument.Range.Information(wdNumberOfPagesInDocument)

これはカーソルをどこに移動するかという指定になります。

What:= は移動先の項目の種類、Which:= は移動先の項目を指定、Count:= で項目数を指定します。

今回はカーソルの移動先を wdGoToPage(ページ)、wdGoToFirst(ページの最初のインスタンス)、Count(最終ページ)に設定しています。

ActiveDocument.Range.Information(wdNumberOfPagesInDocument) で文書のページ数を取得できます。

手順③ プログラムの貼り付け

手順①で表示した画面にコピーしたプログラムを貼り付けます。

手順④ プログラムの実行

画面の上部にあるを押してプログラムを実行します。

ポップアップ画面が表示されますので、貼り付けたい写真を格納しているフォルダを選択してOKボタンを押します。

実行結果

複数のページにわたって画像が挿入されています!

おわりに

いかがだったでしょうか。

今回はWordVBAを使用してWord文書に画像を貼り付ける方法をご紹介しました。

解説の中で分かりにくいという部分がありましたら、ご遠慮なくコメントいただけましたら幸いです。

みなさんの業務が少しでも時短できることを願っています。

コメント

タイトルとURLをコピーしました