VBAを使ってWordを開き、名前を付けて保存し、閉じるプログラムを紹介します。
Wordを操作するための基本プログラムなので、いろいろな場面で応用できるプログラムです。
・非表示や読み取り専用で開く
・VBA入りのエクセルファイルをダウンロード可能
なおこの事例ではエクセルVBAから開く方法を想定しています。
それでは以下で詳しく紹介していきます。
目次
VBAでWordを開く,名前をつけて保存する,閉じるのプログラムを紹介
今回は以下の手順でダイアログからファイル名を取得するプログラムを作っていきます。
手順1. VBAプログラムを実行
以下で詳しく説明していきます。
手順1. VBAプログラムを実行
このページでは以下の4つの工程を行うVBAプログラムを実行します。
2. Wordファイルを開く
3. Wordファイルを新しい名前で保存する
4. Wordファイルを閉じる
1. Wordを起動する
2. Wordファイルを開く
3. Wordファイルを新しい名前で保存する
4. Wordファイルを閉じる
上記の一連の流れをVBAプログラムで行っていきます。
VBA入りのエクセルファイルをダウンロード
以下で紹介しているVBAプログラムをそのまま使いたい人は、以下のフォームからダウンロードできます。
登録したメールアドレスへ「VBAプログラムが含まれたエクセル」を送信します。
本プログラムの内容をそのまま使用可能です。ぜひお仕事にお役立てください。
それでは、以下でプログラムについて詳細を説明します。
VBA作成前の2つの事前準備
ExcelでVBAを使うためにはいくつかの準備が必要です。
具体的には以下です。
2. Wordを扱うための事前準備
上記の2つに関して、以下で説明します。
1. ExcelでVBAを使うための事前準備
エクセルVBAを使うためには、保存ファイルの拡張子変更、Excelの基本設定変更の2つをしておきます。
2つともで難しい作業はなく、それぞれ1分もあれば設定変更可能です。
上記に関しては、以下の記事で解説をしています。
もしVBAを使うための準備段階に不安がある人は上記をご覧ください。
この内容は以下の動画で紹介しています。
入門エクセルマクロの使い方|マクロ作成から実行までを徹底解説
文字や画像だけで分かりづらい人は上記の動画をご覧ください。
2. Wordを扱うための事前準備
この事例ではWordファイルを操作します。
Wordを使用する場合、VBAの参照設定を変更しておく必要があります。
そこで、以下の参照設定を変更します。
これでWordの情報を取得することができるようになります。
参照設定は、以下の手順でVBEの設定を変更します。
1.VBEを開いて頂いて、「ツール」→「参照設定」
2.Microsoft Word XX.X Object Libraryのライブラリにチェックを入れて、OKをクリック
詳細はこちらの画像の通りです。
1.VBEを開いて頂いて、「ツール」→「参照設定」
2.Microsoft Word XX.X Object Libraryのライブラリにチェックを入れて、OKをクリック
上記の画像では、Microsoft Word 15.0 Object Libraryにチェックを入れていますが、使用のPCでは数字が異なるかもしれません。
しかし同様の設定は1つしか存在しないはずなので、そちらにチェックを入れれば問題ありません。
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 40 41 42 43 44 45 46 47 48 49 |
'プログラム0|変数設定の指定 Option Explicit 'プログラム1|プログラム開始 Sub WordOpenClose() 'プログラム2|Wordアプリケーションを起動(表示・非表示を選択) Dim wdapp As Word.Application Set wdapp = New Word.Application wdapp.Visible = True 'wdapp.Visible = False 'プログラム3|Wordファイルパスを取得 Dim filename As String, filepath As String filename = "06_Word.docx" filepath = ThisWorkbook.Path & "\" & filename 'プログラム4|Wordドキュメントを開く(読み取り専用・非表示を選択可) Dim wddoc As Word.Document Set wddoc = wdapp.Documents.Open(filename:=filepath) '読み取り専用 'Set wddoc = wdapp.Documents.Open(filename:=filepath, ReadOnly:=True) '非表示 'Set wddoc = wdapp.Documents.Open(filename:=filepath, Visible:=False) 'プログラム5|Wordドキュメントをウィンドウの最前面に表示 Call AppActivate(filename & " - Word") 'プログラム6|Wordドキュメントを名前を付けて保存 Dim str As String str = Format(Date, "yyyy-mm-dd") & "_" & wddoc.Name Debug.Print str wddoc.SaveAs2 filename:=ThisWorkbook.Path & "\" & str 'wddoc.Save 'プログラム7|Wordドキュメントを閉じる wddoc.Close savechanges:=False 'wddoc.Close 'プログラム8|ワードをアプリケーションごと閉じる wdapp.Quit 'プログラム9|オブジェクト解放 Set wddoc = Nothing Set wdapp = Nothing 'プログラム10|プログラム終了 End Sub |
以下で詳しく説明しています。
プログラム0|変数宣言の指定
1 |
Option Explicit |
「Option Explicit」とは、変数宣言を強制するためのものです。
予期しないエラーを防止できるため「Option Explicit」を入力することを習慣化することを推奨しています。
詳しい説明は以下のページで紹介しています。
プログラム1|プログラム開始
1 |
Sub WordOpenClose() |
「Sub WordOpenClose()」のプログラムを開始することを意味します。
VBAではプロシージャという単位でプログラムを呼び出します。
プロシージャの構文は下記となっています。
1 2 3 |
Sub プロシージャ名() '実行プログラム End Sub |
「Sub」で始まり「End Sub」で終わります。
プロシージャに関連するmoduleの話については以下で説明しています。
プログラム2|Wordアプリケーションを起動(表示・非表示を選択)
1 2 3 |
Dim wdapp As Word.Application Set wdapp = New Word.Application wdapp.Visible = True |
Wordアプリケーション用のオブジェクトを生成
1 2 |
Dim wdapp As Word.Application Set wdapp = New Word.Application |
Wordアプリケーションのオブジェクトを生成を生成します。
ワードアプリケーションのリファレンスは以下の公式を参照ください。
https://docs.microsoft.com/ja-jp/office/vba/api/word.application
Wordを表示して起動
1 |
wdapp.Visible = True |
この事例ではVisibleプロパティを「True」にすることで、Wordアプリを起動してPCウィンドウに表示しています。
Wordを非表示にして起動
1 |
wdapp.Visible = False |
Visibleプロパティを「False」にすることで、PCウィンドウに表示しないようにすることも可能です。
プログラム3|Wordファイルパスを取得
1 2 3 |
Dim filename As String, filepath As String filename = "06_Word.docx" filepath = ThisWorkbook.Path & "\" & filename |
Wordファイル名「06_Word.docx」をfilenameとして取得します。
またエクセルと同じフォルダに存在する「06_Word.docx」のフォルダパスをfilepathとして取得します。
このfilepathで指定したWordファイルを開きます。
なお、この事例ではエクセルからWordを開くことを想定しています。
プログラム4|Wordドキュメントを開く(読み取り専用・非表示を選択可)
1 2 3 4 5 6 |
Dim wddoc As Word.Document Set wddoc = wdapp.Documents.Open(filename:=filepath) '読み取り専用 'Set wddoc = wdapp.Documents.Open(filename:=filepath, ReadOnly:=True) 'PC画面上に非表示 'Set wddoc = wdapp.Documents.Open(filename:=filepath, Visible:=False) |
filepath(プログラム3)で指定したWordドキュメントを開きます。
読み取り専用
1 |
Set wddoc = wdapp.Documents.Open(filename:=filepath, ReadOnly:=True) |
「ReadOnly:=True」とすることで、filepathで指定したWordドキュメントを読み取り専用で開くことができます。
PC画面上に非表示
1 |
Set wddoc = wdapp.Documents.Open(filename:=filepath, Visible:=False) |
「Visible:=False」とすることで、filepathで指定したWordドキュメントを、PC画面に非表示で開くことができます。
Documents.Open メソッド (Word)
DocumentsのOPENメソッドについて、公式ドキュメントの内容を以下に紹介しておきます。
1 |
オブジェクト名.Open(FileName, ConfirmConversions, ReadOnly, AddToRecentFiles, PasswordDocument, PasswordTemplate, Revert, WritePasswordDocument, WritePasswordDocument, Format, Encoding, Visible, OpenConflictDocument, OpenAndRepair, DocumentDirection, NoEncodingDialog) |
名前 | 必須 / オプション | データ型 | 説明 |
---|---|---|---|
FileName | 必須 | Variant | 文書の名前を指定します。パスを指定することもできます。 |
ConfirmConversions | 省略可能 | Variant | True ファイルが Word 形式でない場合は、[ ファイルの変換] ダイアログ ボックスを表示します。 |
ReadOnly | 省略可能 | Variant | True を設定すると、文書が読み取り専用で開かれます。 この引数によって、保存されている文書の読み取り専用の設定が変更されることはありません。 たとえば、読み取り専用の設定をオンにして文書が保存されている場合に、引数 ReadOnly を False に設定しても、そのファイルが読み込み/書き込みとして開かれることはありません。 |
AddToRecentFiles | 省略可能 | Variant | True を設定すると、[ ファイル] メニューの最下部の最近使用したファイルの一覧にファイル名を追加します。 |
PasswordDocument | 省略可能 | Variant | 文書を開くためのパスワードを指定します。 |
PasswordTemplate | 省略可能 | Variant | テンプレートを開くためのパスワードを指定します。 |
Revert | 省略可能 | Variant | FileName が開いている文書のファイル名の場合の処理を制御します。 True を設定すると、保存されていない開いている文書への変更を破棄して、ファイルを再度開きます。 False を設定すると、開いている文書をアクティブにします。 |
WritePasswordDocument | 省略可能 | Variant | 文書への変更を保存するためのパスワードを指定します。 |
WritePasswordTemplate | 省略可能 | Variant | テンプレートへの変更を保存するためのパスワードを指定します。 |
Format | オプション | Variant | 文書を開くために使用するファイル コンバーターを指定します。 WdOpenFormat 定数のいずれかを使用できます。 既定値は wdOpenFormatAuto です。 外部のファイル形式を指定するには、 FileConverter オブジェクトに OpenFormat プロパティを適用して、この引数で使用する値を決定します。 |
Encoding | Optional | Variant | 保存された文書を表示するときに Microsoft Word で使用する、文書のエンコード (コード ページまたは文字セット) を指定します。 使用できる定数は、有効な MsoEncoding クラスの定数です。 有効な MsoEncoding クラスの定数の一覧については、Visual Basic Editor のオブジェクト ブラウザーを参照してください。 既定値はシステム コード ページです。 |
Visible | 省略可能 | Variant | True の 表示ウィンドウで、ドキュメントが開かれている場合です。 既定値は True です。 |
OpenConflictDocument | 省略可能 | Variant | オフラインで競合している文書の競合ファイルを開くかどうかを指定します。 |
OpenAndRepair | 省略可能 | Variant | True を設定すると、文書の破損を防止するために文書が修復されます。 |
DocumentDirection | 省略可能 | WdDocumentDirection | 文書内での文字列の水平方向の向きを指定します。 既定値は wdLeftToRight です。 |
NoEncodingDialog | 省略可能 | Variant | True を設定すると、エンコード方法が認識されない場合には、エンコード方法を指定するダイアログ ボックスが表示されません。 既定値は False です。 |
参考にしてください。
プログラム5|Wordドキュメントをウィンドウの最前面に表示
1 |
Call AppActivate(filename & " - Word") |
プログラム4で開いたWordファイルをPCウィンドウの最前面に表示します。
最前面に表示することにより、プログラム実行後にすぐにWordファイルを操作できるようにします。
プログラム6|Wordドキュメントを名前を付けて保存
1 2 3 4 |
Dim str As String str = Format(Date, "yyyy-mm-dd") & "_" & wddoc.Name wddoc.SaveAs2 filename:=ThisWorkbook.Path & "\" & str 'wddoc.Save |
strという名前でWordファイルを保存します。
「str = Format(Date, “yyyy-mm-dd”) & “_” & wddoc.Name」で、VBAプログラムを実行時の日付(yyyy-mm-dd)を元々のWordファイル名の先頭に付けた文字列を生成します。
このstrをWordファイルの新しい名前とします。
Debug.Printでの検証結果
1 2 3 4 5 6 |
Dim str As String str = Format(Date, "yyyy-mm-dd") & "_" & wddoc.Name & ".docx" Debug.Print str >>>2021-06-13_06_Word.docx |
このstrを使ってファイルを保存し、エクセルファイルと同じフォルダに保存します。
Document.SaveAs2 メソッド (Word)
DocumentのSaveAs2メソッドについて、公式ドキュメントの内容を以下に紹介しておきます。
1 |
オブジェクト名.SaveAs2( _FileName_ , _FileFormat_ , _LockComments_ , _Password_ , _AddToRecentFiles_ , _WritePassword_ , _ReadOnlyRecommended_ , _EmbedTrueTypeFonts_ , _SaveNativePictureFormat_ , _SaveFormsData_ , _SaveAsAOCELetter_ , _Encoding_ , _InsertLineBreaks_ , _AllowSubstitutions_ , _LineEnding_ , _AddBiDiMarks_ , _CompatibilityMode_ ) |
名前 | 必須 / オプション | データ型 | 説明 |
---|---|---|---|
FileName | 省略可能 | Variant | 文書の名前を指定します。 既定値は、現在のフォルダーおよびファイル名です。 文書がまだ 1 回も保存されていない場合、既定の名前 (たとえば、Doc1.doc) が使用されます。 指定したファイル名を持つドキュメントが既に存在する場合は、ユーザーにメッセージを表示せずにドキュメントが上書きされます。 |
FileFormat | 省略可能 | Variant | 文書の保存形式を指定します。 使用できる定数は、次に示す WdSaveFormat クラスの定数のいずれかです。 別の形式で文書を保存するには、 FileConverter オブジェクトの SaveFormat プロパティに適切な値を指定します。 |
LockComments | 省略可能 | Variant | True を指定すると、コメント用の文書をロックします。 既定値は False です。 |
Password | オプション | Variant | ドキュメントを開くパスワード文字列。 下記の「備考」を参照してください。 |
AddToRecentFiles | 省略可能 | Variant | True を指定すると、[ ファイル] メニューの最近使用したファイルのリストに文書を追加します。 既定値は True です。 |
WritePassword | 省略可能 | Variant | ドキュメントへの変更を保存するパスワード文字列。 下記の「備考」を参照してください。 |
ReadOnlyRecommended | 省略可能 | Variant | True を指定すると、文書が開かれるときは常に Microsoft Word は読み取り専用の状態を候補にします。 既定値は False です。 |
EmbedTrueTypeFonts | 省略可能 | Variant | True を指定すると、文書と共に TrueType フォントを保存します。 省略すると、EmbedTrueTypeFonts 引数は EmbedTrueTypeFonts プロパティの値と仮定されます。 |
SaveNativePictureFormat | 省略可能 | Variant | 画像が別のプラットフォーム (例: Macintosh) からインポートされた場合、 True を指定すると、インポートされた画像の Microsoft Windows バージョンのみが保存されます。 |
SaveFormsData | 省略可能 | Variant | True を指定すると、ユーザーが入力したデータはフォームにレコードとして保存されます。 |
SaveAsAOCELetter | 省略可能 | Variant | 文書にメーラーが添付されている場合、 True を指定すると、文書は AOCE レターとして保存されます (メーラーが保存されます)。 |
Encoding | Optional | Variant | エンコードしたテキスト ファイルとして文書を保存する場合に使用するコード ページまたは文字セットを指定します。 既定値はシステム コード ページです。 このパラメーターにすべての MsoEncoding クラスの定数を指定することはできません。 |
InsertLineBreaks | 省略可能 | Variant | 文書をテキスト ファイルとして保存する場合、 True を指定すると、テキストの各行の最後に改行が挿入されます。 |
AllowSubstitutions | 省略可能 | Variant | 文書をテキスト ファイルとして保存する場合、 True を指定すると、Word ではいくつかの記号が類似したテキストに置換されます。 たとえば、著作権記号は (c) として表示されます。 既定値は False です。 |
LineEnding | 省略可能 | Variant | テキスト ファイルとして保存する文書内で改行および段落区切りを示す方法を指定します。 WdLineEndingType の定数は、wdCRLF (既定) または wdCROnly のいずれかを指定できます。 |
AddBiDiMarks | 省略可能 | Variant | True を指定すると、出力ファイルに制御文字を追加して、元の文書のテキストの双方向レイアウトを保存します。 |
CompatibilityMode | 省略可能 | Variant | 文書を開くときに Word で使用する互換モードです。 WdCompatibilityMode の定数を使用します。 |
なおPDFに変換することも可能です。
プログラム7|Wordドキュメントを閉じる
1 2 |
wddoc.Close savechanges:=False 'wddoc.Close |
プログラム3で開いたWordファイルを保存せずに閉じます。
とはいえ、プログラム6で名前を付けて新しいWordファイルとして保存しているため、わざわざ記述する必要はありません。
参考として保存せずにWordファイルを閉じる方法を紹介しています。
wddoc.CloseでWordドキュメントを閉じる
1 |
wddoc.Close |
引数なしでもWordファイルを閉じることは可能です。
Documents.Close メソッド (Word)
DocumentsのCloseメソッドについて、公式ドキュメントの内容を以下に紹介しておきます。
1 |
オブジェクト名.式.Close (SaveChanges, OriginalFormat, RouteDocument) |
名前 | 必須 / オプション | データ型 | 説明 |
---|---|---|---|
SaveChanges | 省略可能 | Variant | 保存先を指定のドキュメントのアクションです。 WdSaveOptions 定数は、次のいずれか: wdDoNotSaveChanges 、 wdPromptToSaveChanges 、または wdSaveChanges 。 |
OriginalFormat | 省略可能 | Variant | 保存先を指定するドキュメントの形式です。 WdOriginalFormat 定数は、次のいずれか: wdOriginalDocumentFormat wdPromptUser 、 wdWordDocument 。 |
RouteDocument | 省略可能 | Variant | True の 次の受信者に文書を回覧します。 ドキュメントに、回覧先がない場合、この引数は無視されます。 |
参考にしてください。
プログラム8|Wordをアプリケーションごと閉じる
1 |
wdapp.Quit |
プログラム2で起動したWordをアプリケーションごと閉じます。
プログラム9|オブジェクト解放
1 2 |
Set wddoc = Nothing Set wdapp = Nothing |
プログラムで設定したオブジェクトを解放します。
プログラム10|プログラム終了
1 |
End Sub |
プログラム1と対になるプログラムで、プログラム終了させるための記述です。
「End Sub」を読み込むと、プログラムが終了します。
プログラムの解説はここまでです。
エクセルVBAでワード操作を自動化する事例|PDF変換から差し込み印刷まで
ここではVBAでWordを開いて閉じるプログラムを紹介しました。
これを応用して、実務でワード操作して効率化する事例を紹介します。
Excel VBAについて詳しく理解したいなら
VBAを活用すると、仕事を効率化できる幅を広げることができます。
たとえば私が実際にVBAを活用して効率化してきた作業は以下の記事で紹介しています。
興味がある人は以下の記事もご覧ください。
動画でも解説しています。
エクセルマクロVBAで出来ることを15の事例で紹介|日常業務をラクにするヒントを見つけよう!
(音声が小さいので、ボリュームを上げてご覧いただければと思います)
VBAの勉強方法
私はプログラミング初心者からVBAを勉強を始めて少しずつレベルアップしていきました。
成長の過程は以下で紹介しています。
学習の過程では、意識すべきポイントがあります。
特に独学の場合だと、勉強を優先してしまい、肝心な実践を疎かにしがちです。
私の経験では、実践から逆算した勉強が必要だと考えています。
目指すべきは会社でお金をもらいながら勉強することです。
要はVBAを仕事の一つとして上司に認めてもらうのです。
そうすればわざわざ高いお金を払って勉強をする必要がなくなります。
しかも作業を自動化して、会社やチームに貢献しつつ、自らのスキルアップできます。
そのために必要な考え方を以下で紹介しています。
とはいえ、プログラミング初心者でVBAについて知識ゼロの人もいるはずです。
いきなり会社でVBAで使うことさえ、とてつもなくハードルが高く見えてしまうものです。
その場合は、VBAの基本について学ぶ必要があります。
たとえば車の運転も慣れてしまえば、たいしたことではありません。
しかし教習所で運転の基本を学び、免許を取得することで、公道で運転できるようになります。
VBAも同じです。VBAに免許はありませんが、まずは基本を学ばないことには会社で使えるレベルにはなりません。
実際に私もプログラミング初心者のときは、動画を見たり書籍を読んだりして勉強しました。
今はオンラインの教材で無料で学習できるものも多いです。
上記のリンクでは、私の経験から勉強にオススメの教材を紹介しています。
興味がある人はご覧ください。