Excel VBAでオブジェクト指向プログラミング(Word VBA編)
■Word VBAのオブジェクトについて
MicrosoftからWordの機能を利用するためのオブジェクト群が提供されていますが、下位オブジェクト(サブクラス)の種類が非常に多いため、ApplicationオブジェクトとDocumentオブジェクトを中心とする、各オブジェクトの階層構造(依存関係)を掲載します。
⇒詳細はMicrosoftのサイト(Office VBA リファレンス(Word))を参照して下さい。
Word関連オブジェクト群の階層構造
Word関連オブジェクト群の中で、最上位に位置するものがApplicationオブジェクトであり、最も重要かつ頻繁に利用されるものがDocumentオブジェクトです。
下表はApplicationオブジェクトとDocumentオブジェクトの下位オブジェクト(サブクラス)を一覧化したもの(※)で、Word関連オブジェクト群のオブジェクトの大半が含まれています。
(※)Visual Basic Editor(VBE)に搭載されているオブジェクトブラウザで、ApplicationオブジェクトとDocumentオブジェクトのメソッドおよびプロパティの定義情報を参照し、取得可能なオブジェクトをExcelにコピペして、自作のExcelツールで成形したものです。
Applicationオブジェクト | |||||||||||
AddInsコレクション | |||||||||||
AnswerWizardオブジェクト | |||||||||||
Assistantオブジェクト | |||||||||||
AutoCaptionsコレクション | |||||||||||
AutoCorrectオブジェクト | |||||||||||
Bibliographyオブジェクト | |||||||||||
Browserオブジェクト | |||||||||||
CaptionLabelsコレクション | |||||||||||
COMAddInsコレクション | |||||||||||
CommandBarsコレクション | |||||||||||
DefaultWebOptionsコレクション | |||||||||||
Dialogsコレクション | |||||||||||
Dictionariesコレクション | |||||||||||
Documentオブジェクト | |||||||||||
Bibliographyオブジェクト | |||||||||||
Bookmarksコレクション | |||||||||||
Charactersコレクション | |||||||||||
CommandBarsコレクション | |||||||||||
Commentsコレクション | |||||||||||
ContentControlsコレクション | |||||||||||
CustomXMLPartsコレクション | |||||||||||
DocumentInspectorsコレクション | |||||||||||
DocumentLibraryVersionsコレクション | |||||||||||
Emailオブジェクト | |||||||||||
Endnotesコレクション | |||||||||||
Envelopeオブジェクト | |||||||||||
Fieldsコレクション | |||||||||||
Footnotesコレクション | |||||||||||
FormFieldsコレクション | |||||||||||
Framesコレクション | |||||||||||
Framesetオブジェクト | |||||||||||
HTMLDivisionsコレクション | |||||||||||
Hyperlinksコレクション | |||||||||||
Indexesコレクション | |||||||||||
InlineShapesコレクション | |||||||||||
LetterContentオブジェクト | |||||||||||
ListParagraphsコレクション | |||||||||||
Listsコレクション | |||||||||||
ListTemplatesコレクション | |||||||||||
Mailerオブジェクト | |||||||||||
MailMergeオブジェクト | |||||||||||
MetaPropertiesコレクション | |||||||||||
MsoEncodingオブジェクト | |||||||||||
MsoEnvelopeオブジェクト | |||||||||||
OfficeThemeオブジェクト | |||||||||||
OMathsコレクション | |||||||||||
PageSetupオブジェクト | |||||||||||
Paragraphsコレクション | |||||||||||
Permissionオブジェクト | |||||||||||
ProofreadingErrorsコレクション | |||||||||||
Rangeオブジェクト | |||||||||||
ReadabilityStatisticsコレクション | |||||||||||
Researchオブジェクト | |||||||||||
Revisionsコレクション | |||||||||||
Scriptsコレクション | |||||||||||
Sectionsコレクション | |||||||||||
Sentencesコレクション | |||||||||||
ServerPolicyオブジェクト | |||||||||||
Shapeオブジェクト | |||||||||||
Shapesコレクション | |||||||||||
SharedWorkspaceオブジェクト | |||||||||||
SignatureSetオブジェクト | |||||||||||
SmartDocumentオブジェクト | |||||||||||
SmartTagsコレクション | |||||||||||
StoryRangesコレクション | |||||||||||
Stylesコレクション | |||||||||||
StyleSheetsコレクション | |||||||||||
Subdocumentsコレクション | |||||||||||
Documentsコレクション | |||||||||||
EmailOptionsコレクション | |||||||||||
FileConvertersコレクション | |||||||||||
FileDialogオブジェクト | |||||||||||
FontNamesコレクション | |||||||||||
HangulHanjaConversionDictionariesコレクション | |||||||||||
IAssistanceオブジェクト | |||||||||||
KeyBindingオブジェクト | |||||||||||
KeyBindingsコレクション | |||||||||||
KeysBoundToオブジェクト | |||||||||||
Languagesコレクション | |||||||||||
LanguageSettingsコレクション | |||||||||||
ListGalleriesコレクション | |||||||||||
MailingLabelオブジェクト | |||||||||||
MailMessageオブジェクト | |||||||||||
MsoAutomationSecurityオブジェクト | |||||||||||
MsoFeatureInstallオブジェクト | |||||||||||
MsoLanguageIDオブジェクト | |||||||||||
NewFileオブジェクト | |||||||||||
OMathAutoCorrectオブジェクト | |||||||||||
Optionsコレクション | |||||||||||
RecentFilesコレクション | |||||||||||
Selectionオブジェクト | |||||||||||
SmartTagRecognizersコレクション | |||||||||||
SmartTagTypesコレクション | |||||||||||
SpellingSuggestionsコレクション | |||||||||||
SynonymInfoオブジェクト | |||||||||||
Systemオブジェクト | |||||||||||
TaskPanesコレクション | |||||||||||
Tasksコレクション | |||||||||||
Templateオブジェクト | |||||||||||
Templatesコレクション | |||||||||||
VBEオブジェクト | |||||||||||
WdAlertLevelオブジェクト | |||||||||||
WdEnableCancelKeyオブジェクト | |||||||||||
WdMailSystemオブジェクト | |||||||||||
WdWindowStateオブジェクト | |||||||||||
Windowオブジェクト | |||||||||||
Windowsコレクション | |||||||||||
XMLNamespacesコレクション |
■Wordのオブジェクトを使用するための事前準備
Wordのオブジェクトを使用するための事前準備は、以下の3ステップです。
⇒オブジェクトを使用するための事前準備とオブジェクトブラウザによる調査方法については、Excel VBAでオブジェクト指向プログラミング(事前準備編)を参照して下さい。
①ライブラリの参照設定
Visual Basic Editor(VBE)のファイルメニューから[ツール]-[参照設定]を選択し、参照設定ダイアログでMicrosoft Word x.x Object Libraryのチェックボックスにチェックを入れ、[OK]ボタンを押下。
②オブジェクト変数の定義
プログラムの宣言部でオブジェクト変数を定義。
- Dim wd As Object
③インスタンスの生成
プログラムの処理部でインスタンスを生成。
- Set wd = New Word.Application
- 'ここにWordを使用した処理を記述
- Set wd = Nothing
(参考)「Set wd = New Word.Application」の部分を「Set wd = CreateObject(“Word.Application")」と記述すれば、ステップ①(ライブラリの参照設定)は不要です。
■ExcelのアジェンダからWordの議事録を作成する処理
定例会議の議事録を作成する際、予めアジェンダから議事録のひな型を作成し、議事録の作成を効率化するためのExcelツールです。
以下で説明するサンプル・プログラムは、下図のアジェンダ(↓)を読み込み、
下図の議事録(↓)を作成するツールです。
処理の概要
処理の流れは以下の通りです。
①Excelのアジェンダを読み込んで議事録に貼り付けるテキストを準備
②Wordを起動して新規文書を作成し、準備したテキストを貼り付け
③先頭行と最終行に書式を設定
⇒作成したWord文書には文章を追記する必要があるため、ファイルを閉じずに開いたままにしてあります。
サンプル・プログラム
行番号6でアジェンダを開き、行番号8~16で議事録に貼り付けるテキストを作成しています。
行番号18~19でWordを起動しています(行番号18でWordを起動し、行番号19で目に見えるようにしています)。
行番号20で新規文書を開き、行番号21で準備したテキストを貼り付けています。
行番号22で先頭行を中央揃えにし、行番号23で文字サイズを14ポイントに設定。行番号24で二重下線を引いています。
行番号25で最終行を右詰めにしています。
(補足)このサンプル・プログラムでは新規文書にテキストを貼り付けていますので、「doc.Paragraphs(行番号)」「doc.Sentences(行番号)」という形式でテキストの各行を取扱うことができています。
- Dim sht, wd, doc As Object
- Dim wstr As String
- Dim i As Integer
- Private Sub Sample1()
- Workbooks.Open (“C:\work\アジェンダ.xlsx")
- Set sht = ActiveSheet
- wstr = sht.Cells(1, 2) & “ 議事録" & vbCrLf & vbCrLf
- wstr = wstr & “1." & sht.Cells(5, 2) & “ " & sht.Cells(5, 4) & vbCrLf & vbCrLf
- wstr = wstr & “2." & sht.Cells(7, 2) & “ " & sht.Cells(7, 4) & vbCrLf & vbCrLf
- wstr = wstr & “3." & sht.Cells(9, 2) & “ " & sht.Cells(9, 4) & vbCrLf & vbCrLf
- wstr = wstr & “4." & sht.Cells(11, 2) & vbCrLf
- For i = 16 To sht.Cells(sht.Rows.Count, 2).End(xlUp).Row
- wstr = wstr & " (" & sht.Cells(i, 2) & “)" & sht.Cells(i, 3) & “(説明者:" & sht.Cells(i, 9) & “)" & vbCrLf & vbCrLf & vbCrLf & vbCrLf
- Next i
- wstr = wstr & vbCrLf & “以上"
- Set wd = New Word.Application
- wd.Visible = True
- Set doc = wd.Documents.Add
- wd.Selection.TypeText wstr
- doc.Paragraphs(1).Alignment = wdAlignParagraphCenter
- doc.Sentences(1).Font.Size = 14
- doc.Sentences(1).Font.Underline = wdUnderlineDouble
- doc.Paragraphs(doc.Paragraphs.Count).Alignment = wdAlignParagraphRight
- End Sub
■Excelシートに入力された漢字と読み仮名を基にルビ付のWord文書を作成する処理
予めExcelシートに入力しておいた漢字と読み仮名から、ルビ付のWord文書を作成するためのExcelツールです。
用途がわからないと思いますので、少し補足します。
筆者が観音経(←「妙法蓮華経 観世音菩薩普門品第二十五」のことです)にはまっていた頃、好みの読み仮名を振った観音経のテキストを作る(※)ため、Excelシートに漢字と好みの読み仮名を記入(下図参照)し、このサンプル・プログラムでルビ付のWord文書を作成を作成しました。
(※)下図の例で言うと、通常の読み仮名は「せそんみょうそうぐ がこんじゅうもんぴ」ですが、実際の読み方に合せて「せーそんみょうそうぐー がーこんじゅうもんぴー」にしてあります。
処理の概要
処理の流れは以下の通りです。
①Wordを起動して新規文書を作成
②Excelシートの漢字をWord文書に転記し、読み仮名をルビとして設定
③Word文書を保存し、Wordを終了
サンプル・プログラム
行番号6~7でWordを起動しています(行番号6でWordを起動し、行番号7で目に見えるようにしています)。
行番号8で新規文書を開き、行番号9で縦書きの設定をしています。
行番号14で漢字を転記し、行番号15~17でルビを設定しています。
行番号20~21でWord文書を保存して閉じ、行番号22~23でWordを終了しています。
- Dim sht, wd, doc As Object
- Dim i As Integer
- Private Sub Sample2()
- Set sht = ActiveSheet
- Set wd = New Word.Application
- wd.Visible = True
- Set doc = wd.Documents.Add
- doc.Content.Orientation = wdTextOrientationVerticalFarEast
- For i = 1 To sht.Cells(sht.Rows.Count, 1).End(xlUp).Row
- If sht.Cells(i, 1) = “" Then
- doc.Bookmarks(“\EndOfDoc").Range.InsertAfter Text:=" "
- Else
- doc.Bookmarks(“\EndOfDoc").Range.InsertAfter Text:=sht.Cells(i, 1)
- pos = doc.Characters.Count – 1
- doc.Characters(pos).PhoneticGuide “"
- doc.Characters(pos).PhoneticGuide (sht.Cells(i, 2))
- End If
- Next i
- doc.SaveAs (“C:\work\観音経.docx")
- doc.Close
- wd.Quit
- Set wd = Nothing
- End Sub
実行結果(観音経)
①実行結果
サンプル・プログラムを実行すると、以下のような文書ができあがります。
観音経.pdf
②おまけ(その1)
サンプル・プログラムの実行結果(↑)は、偈(げ)の部分だけですが、全量だと以下のようになります。
⇒A4版の紙に4 in 1両面で刷り出し、冊子のように閉じられるようにしてあります。
観音経(4in1両面、冊子(用紙サイズ:A5、出力用紙:A4、向き:縦、1枚あたりの頁数:2、頁の順序:縦(右から左)、両面印刷:長辺とじ)).pdf
③おまけ(その2)
「読み仮名なんかいらない」という方には、読み仮名抜きのバージョンも用意してあります。
⇒A4版の紙に2 in 1両面(または4 in 1片面)で刷り出すようにしてあります。
観音経_ルビなし_.pdf
出版社:インプレス
発売日:2022/3/23
単行本(ソフトカバー):A5判/912ページ
出版社:技術評論社
発売日:2021/1/9
単行本(ソフトカバー):A5判/800ページ
出版社:技術評論社
発売日:2019/11/25
単行本(ソフトカバー):B5変形判/576ページ
ディスカッション
コメント一覧
まだ、コメントがありません