【VBA】Wordで画像を選択して挿入するマクロ

VBA

Microsoft Wordで作業をしていると、複数の画像を指定の位置に一括で挿入したいという場面があるかもしれません。今回は、ユーザーが選択した画像を文書の2ページ目に挿入するVBAマクロを紹介します。このマクロは、画像の挿入を簡単にするだけでなく、コードを汎用的に使用できるように修正も加えました。

マクロの全体像

以下が、汎用性を考慮して作成した画像挿入マクロのコードです。

Sub InsertAndEnterImages()
    Dim fd As FileDialog
    Dim fileChosen As Integer
    Dim i As Integer
    Dim img As InlineShape
    Dim rng As Range

    ' ファイルダイアログを表示して画像を選択
    Set fd = Application.FileDialog(msoFileDialogFilePicker)
    With fd
        .Title = "Select Images"
        .Filters.Add "Images", "*.gif; *.jpg; *.jpeg; *.bmp; *.png", 1
        .AllowMultiSelect = True
        .InitialFileName = ""
        fileChosen = .Show
    End With

    ' 画像が選択されなかった場合、マクロを終了
    If fileChosen <> -1 Then
        Exit Sub
    End If

    ' 文書が1ページ以下の場合は、改行を挿入して2ページ目を作成
    If ActiveDocument.ComputeStatistics(wdStatisticPages) < 2 Then
        ActiveDocument.Content.InsertAfter vbCr & vbCr
    End If

    ' 2ページ目の開始位置を取得
    Set rng = ActiveDocument.GoTo(What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=2)
    rng.Collapse Direction:=wdCollapseStart

    ' 画像を挿入
    For i = 1 To fd.SelectedItems.Count
        Set img = ActiveDocument.InlineShapes.AddPicture(FileName:=fd.SelectedItems(i), LinkToFile:=False, SaveWithDocument:=True, Range:=rng)
        img.Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
        rng.Collapse Direction:=wdCollapseEnd
    Next i
End Sub

コードの詳細解説

1. 画像の選択

Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)

この部分では、ユーザーが画像ファイルを選択できるようにファイルダイアログを作成しています。msoFileDialogFilePicker は、ファイルを選択するためのダイアログボックスを表示するオプションです。

With fd
    .Title = "Select Images"
    .Filters.Add "Images", "*.gif; *.jpg; *.jpeg; *.bmp; *.png", 1
    .AllowMultiSelect = True
    .InitialFileName = ""
    fileChosen = .Show
End With
  • Title: ダイアログのタイトルを設定します。
  • Filters: 画像ファイルのみを選択できるようにフィルタを追加します。
  • AllowMultiSelect: 複数の画像を選択可能にします。

ユーザーがファイルを選択しなかった場合、マクロが終了するようにしています。

If fileChosen <> -1 Then
    Exit Sub
End If

2. 2ページ目の開始位置の取得

If ActiveDocument.ComputeStatistics(wdStatisticPages) < 2 Then
    ActiveDocument.Content.InsertAfter vbCr & vbCr
End If

Set rng = ActiveDocument.GoTo(What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=2)
rng.Collapse Direction:=wdCollapseStart
  • ComputeStatistics(wdStatisticPages): 文書のページ数を取得します。文書が1ページしかない場合、改行を追加して2ページ目を作成します。
  • GoTo: 文書の特定のページや位置に移動します。ここでは2ページ目の開始位置にカーソルを移動しています。

3. 画像の挿入

For i = 1 To fd.SelectedItems.Count
    Set img = ActiveDocument.InlineShapes.AddPicture(FileName:=fd.SelectedItems(i), LinkToFile:=False, SaveWithDocument:=True, Range:=rng)
    img.Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
    rng.Collapse Direction:=wdCollapseEnd
Next i
  • AddPicture: 画像を指定した範囲に挿入します。
  • ParagraphFormat.Alignment: 画像を文書内で中央揃えにします。
  • Collapse Direction:=wdCollapseEnd: 画像を挿入した後、カーソルを次の挿入位置に移動させます。

コードのカスタマイズ例

このマクロは汎用性を持たせているため、特定のニーズに応じて簡単にカスタマイズすることができます。

  • 挿入位置の変更: 画像を特定のページではなく、文書の最後に挿入するように変更することも可能です。
  • 画像サイズの変更: 画像の挿入時にサイズを自動調整するコードを追加することもできます。
img.LockAspectRatio = msoTrue
img.Width = CentimetersToPoints(10)

このように、挿入される画像の幅を10cmに設定し、高さは自動的に調整することができます。

まとめ

このマクロを使用すれば、複数の画像を簡単に文書の指定ページに挿入することができます。汎用的に使えるように構成されているため、さまざまなシナリオに応じてカスタマイズが可能です。ぜひ、あなたのプロジェクトに役立ててください。


Wordに挿入した画像ってサイズとか変えずらいの何でだろうね

ではまたー

コメント

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