選択フォルダ内のワードファイルの表示倍率を一括変更

Word VBAを用いたファイル操作

 仕事上で複数のワードファイルの表示倍率を揃えることとなり、作成したWord VBAコードと簡易ソフトです。
 ExcelでWordファイルを操作することも出来ますが、参照設定を行う必要があります。そもそもWordファイルを操作するのなら、Word VBAで作成した方が汎用性が高いと考え、Word VBAに触れてみました。

簡易ソフト

 選択フォルダのワードファイルの表示倍率を一括変更するフリーソフトです。自分用のため簡易な作りですが、よければどうぞ。 ダウンロード 43KB

ポイント

 ・Wordでのコード記述
 ・FileDiarogプロパティ
 ・フォルダの存在確認
 ・複数のファイルの操作
 ・倍率変更の方法

 FileDialogプロパティの引数に「msoFileDialogFolderPicker」を設定しコードを実行すると、「参照」のダイアログが表示される。ダイアログではフォルダを選択でき、選択したフォルダは、SelectedItemsプロパティで、そのパスを取得できる。

 何らかの理由で、フォルダの存在を確認するケースも考えられるので、Dir関数を用いたフォルダの存在確認方法を、補足として併記する。


サンプルコード

選択したフォルダ内の、全てのWordファイルを一括で任意の表示倍率に変更するサンプルコード

Sub All_Documents_ZoomChange() 'メイン
    Dim strDirPath As String
    Dim strExistDir As String
    strDirPath = Search_Directory()
    If Len(strDirPath) = 0 Then Exit Sub
    strExistDir = IsExistence_Directory(strDirPath)
    If Len(strExistDir) = 0 Then Exit Sub
    Call Search_Documents(strDirPath)
End Sub
'-------------------------------------------------------------------------------------------------------

Private Function Search_Directory() As String 'フォルダの選択
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = True Then Search_Directory = .SelectedItems(1)
    End With
End Function
'-------------------------------------------------------------------------------------------------------

Private Function IsExistence_Directory(ByVal DirPath As String) As String 'フォルダ存在確認
    IsExistence_Directory = Dir(DirPath, vbDirectory)
End Function
'-------------------------------------------------------------------------------------------------------

Private Sub Search_Documents(ByVal strPath As String) '各ファイルの倍率変更
    Dim strTarget As String
    Dim strDirPath As String
    Dim varZoom As Variant
    strPath = strPath & Application.PathSeparator
    strTarget = Dir(strPath & "*.doc?")
    If strTarget = "" Then Exit Sub
    Do
        varZoom = InputBox("倍率を指定して下さい(10~500)", , 100)
        If Len(varZoom) = 0 Then Exit Sub
    Loop Until IsNumeric(varZoom)
    varZoom = CLng(varZoom)
    If varZoom < 10 Or 500 < varZoom Then
        MsgBox "指定できる数値は10~500の間です", vbExclamation, "中止します"
        Exit Sub
    End If
    Do
        With Word.Documents.Open(strPath & strTarget)
            If ActiveWindow.View.Zoom <> varZoom Then
                ActiveWindow.View.Zoom = varZoom
                .Saved = False 'ここがポイント
                .Save
            End If
            .Close
        End With
        strTarget = Dir()
    Loop Until strTarget = ""
    strTarget = Dir("")
End Sub

メモ

◆Wordでのコード記述場所
 WordでVBAコードを記述する場合の操作は次の通り。
 【1】Wordを起ち上げ、[Alt]+[F11]を押す。VBEが起ち上がる。
 【2】左上部の「プロジェクト Project」の任意の場所で「右クリック」→「挿入」→「標準モジュール」

 挿入された標準モジュールにコードを記入、又はサンプルコードを貼り付ける。

◆FileDiarogプロパティ
 ファイルダイアログを表示する。引数により表示されるダイアログの種類が異なる。引数に設定できるのは、次のMsoFileDialogTypeクラスの定数のいずれか。

  ・msoFileDialogFilePicker 「参照」ダイアログでファイルを選択できます。
  ・msoFileDialogFolderPicker 「参照」ダイアログでフォルダを選択できます。
  ・msoFileDialogOpen 「ファイルを開く」ダイアログ
  ・msoFileDialogSaveAs 「名前をつけて保存」ダイアログ

 ファイルダイアログは、ファイル(フォルダ)のパスを取得するものであり、「ファイルを開く」や「名前をつけて保存」のダイアログであっても、実際にファイルが開かれたり、保存されるものではない。

 ダイアログで選択したファイル(フォルダ)パスの取得には、SelectedItemsプロパティを使用する。使用例は以下を参照。

Sub UseFileDialogOpen()
    Dim lngCount As Long
    ' ファイル ダイアログを開きます。
    With Application.FileDialog(msoFileDialogOpen)
        .AllowMultiSelect = True 'ファイルの複数選択を可能にする
        .Show
        ' 選択された各ファイルのパスを表示します。
        For lngCount = 1 To .SelectedItems.Count
            MsgBox .SelectedItems(lngCount)
        Next lngCount
    End With
End Sub

◆Dir関数
 指定したパターンやファイル属性に一致する、ファイルやフォルダの名前の文字列を返す。返される文字列は(String型)。ドライブのボリュームラベルも取得可能。

 構文:Dir[(pathname[, attributes])]

 [pathname]
  ファイル名を表す文字列式を指定。フォルダ名やドライブ名も含めて指定可能。
  指定した内容が見つからないときは、長さ「0」の文字列を返す。

 [attributes]
  省略可能です。取得したいファイルの属性の値の合計、または定数を指定。
  省略すると、標準ファイルの属性。Windowsでの「設定値」は以下の6つ
   【定数 / 値 / 内容】
   vbNormal / 0 / 標準ファイル
   vbReadOnly / 1 / 読み取り専用ファイル
   vbHidden / 2 / 隠しファイル
   vbSystem / 4 / システム ファイル
   vbVolume / 8 / ボリューム ラベル。この値を指定すると、すべての属性は無効。
   vbDirectory / 16 / フォルダ

Excel Tips for Teachers

Copyright (C) 2009- 坂江 保 All Rights Reserved.