前回は複数の画像をExcelの複数のシートに貼り付ける方法をご紹介しました。
今回は複数の画像をWordの複数のページに貼り付ける方法をご紹介します。
ではさっそくやっていきましょう!
手順① プログラム画面の表示
こちらはExcelの場合と同様の手順になりますので、こちらを参考にしましょう。
手順② プログラムのコピーと貼り付け
こちらのプログラムをWordのVBA画面に貼り付けてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
Sub pasteImage() ' 貼り付ける画像が格納されているフォルダを選択します With Application.FileDialog(msoFileDialogFolderPicker) If .Show = True Then ' 取得したフォルダパスを変数に入れる folderPath = .SelectedItems(1) End If End With ' フォルダ内の画像パスを格納する配列を用意します Dim imagePath() As Variant ReDim imagePath(0) ' 1枚目の画像パスを配列に入れます imagePath(0) = Dir(folderPath & "\") ' 配列の画像パスのインデックス idx = 0 ' フォルダ内の画像の枚数分繰り返す Do While imagePath(idx) <> "" ' 配列に画像のパスを格納する idx = idx + 1 ' 配列を再定義します ReDim Preserve imagePath(idx) ' 配列に画像のパスを格納します imagePath(idx) = Dir() Loop For i = 0 To UBound(imagePath) - 1 ' 画像の貼り付け ActiveDocument.Shapes.AddPicture FileName:=folderPath & "\" & imagePath(i) ' ページの挿入 ActiveDocument.Range.InsertAfter Chr(12) ' 最終ページに移動 Selection.GoTo What:=wdGoToPage, Which:=wdGoToFirst, Count:=ActiveDocument.Range.Information(wdNumberOfPagesInDocument) Next End Sub |
解説
‘ 貼り付ける画像が格納されているフォルダを選択します
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文書に画像を貼り付ける方法をご紹介しました。
解説の中で分かりにくいという部分がありましたら、ご遠慮なくコメントいただけましたら幸いです。
みなさんの業務が少しでも時短できることを願っています。
コメント