|
|
|
本章では、Word/VBA の記述ルールやプログラムの操作対象となるオブジェクトについて説明します。 |
|
|
|
【モジュール】 |
VBAで作成したプログラムを管理するための入れ物。宣言文と複数のプロシージャーで構成されます。モジュールには以下の2種類があります。 |
ThisDocument |
文書に依存したプロセジャーを作成する場合に使用します。 |
標準モジュール |
汎用的なプロセジャーを作成する場合に使用します。標準モジュールで宣言した変数・定数や作成したプロシージャは、すべてのモジュールで使用することができます。 |
クラスモジュール |
ドキュメント・パラグラフなどのイベントプロセジャを管理します。 |
|
|
|
|
|
【フォーム】 |
|
フォームは、固定ダイアログと言われる種類のフォームウィンドウを自由にデザインして作成し表示利用できる機能です。
フォームの作成は、プロジェクトウィンドウのProject(VBA)を右クリックして、メニューを開き、「挿入」→「ユーザ-フォーム」の順に選択します。 |
|
|
|
|
VBAコードのひとつの単位。プロセジャーから別のプロセジャーを呼び出すことができます。プロセジャーを呼び出すときは引数を指定して値を渡します。プロセジャーには以下の3種類があります。 |
|
イベントプロセジャー |
特定のオブジェクトの特定のイベントに応じて実行されるプロシージャでクラスモジュールで管理される。 |
Sub プロセジャー |
単独で完結する処理などを記述。実行結果を返す必要がない処理に使用。 |
Function プロセジャー |
実行結果を返す処理に使用。 |
|
|
|
|
|
【オブジェクト】
Word オブジェクトは階層順に編成され、階層の最上位には Application と Document という 2 つのメイン クラスがあります。
Word オブジェクト モデルは、ユーザー インターフェイスとほとんど同じです。たとえば、Application
オブジェクトはアプリケーション全体を表し、Document オブジェクトはそれぞれ 1 つの Word 文書を表し、Paragraph オブジェクトは 1 つの段落に対応します。
文書は文字で構成されます。文字は単語に編成され、単語は文として構造化されます。文は段落の中に配置され、段落はセクションの内部に配置されます。各セクションにはそれぞれのヘッダーとフッターが含まれます。
各オブジェクトには、オブジェクトの操作やオブジェクトとの対話処理に使用できる、多くのメソッドとプロパティがあります。
ActiveDocument 作業中の文書全体
Paragraph 段落(改行マークで区切られた部分)
Sentence 文(読点(。)で区切られた部分)
Words 単語
Characters 文字
Selection 文書の選択部分(マウスで指定できます)
Range 文書の選択部分(プログラム中で指定します)
|
|
|
|
|
【プロパティ】
オブジェクトが持つ属性(性質、特徴)の記述です。
Application オブジェクトのプロパティ
Active Window プロパティ
ActiveDocument
ActivePrinter
ActiveWindow
AutoCorrect
Caption
CapsLock
DisplayAlerts
DisplayStatusBar
FileSearch
Path
Options
Selection
UserName
Visible
【メソッド】
オブジェクトを動作させる記述です。メソッドは引数を持っています。 また、引数は必ず指定 しなければならないものと、省略可能なものがあります。
Application オブジェクトのメソッド
CheckSpelling
Help
Move
Resize
Quit
SendFax
詳細は MSDN ライブラリ へ
|
|
|
|
|
Application オブジェクトは Word アプリケーションを表し、他のすべてのオブジェクトの親になります。このオブジェクトのメンバは、通常、Word 全体に適用されます。このオブジェクトのプロパティとメソッドを使用して、Word の環境を制御できます。
'ウインドウを消す
Application.Visible = False 'プロパティ
'Wordを終了する
Application.Quit 'メソッド |
|
|
|
|
文書は文字で構成されます。文字は単語に編成され、単語は文として構造化されます。文は段落の中に配置され、段落はセクションの内部に配置されます。各セクションにはそれぞれのヘッダーとフッターが含まれます。Document
オブジェクトには、このような構造にマッピングされる、次のコレクションがあります。
?Characters
?Words
?Sentences
?Paragraphs
?Sections
?HeadersFooters |
|
|
|
|
Bookmark オブジェクトは、開始位置と終了位置を指定して文書内の連続する領域を表す点で、Range オブジェクトおよび Selection オブジェクトと似ています。
ブックマークは、文書内の位置にマークを付けたり、文書内のテキストのコンテナとしてマークを付けるのに使用します。
Bookmark オブジェクトは、カーソル位置で構成されます。文書全体が Bookmark オブジェクトになることもあります。
Bookmark は文書と一緒に保存される、文書内の名前付きの場所と考えることができます。
▼操作方法 : ブックマークを挿入する
ブックマークを挿入したい箇所にカーソルを移動する
↓
メニュー[挿入]−[ブックマーク]をクリック
↓
[ブックマーク]ダイアログ−[ブックマーク名]欄に、その箇所を示すわかりやすい名前を入力
↓
[ブックマーク]ダイアログ−[追加]ボタンをクリック
詳細はマイクロソフトWord Bookmark オブジェクトを参照してください。 |
|
|
|
|
「セクション」というグループに分けることで、本来文書全体に効いてしまう機能が、セクションごとに個別に設定できるようになります。
'ドキュメント(文書)内のセクションの数をカウントします
MsgBox ActiveDocument.Sections.Count
'1番目のセクションを選択します
ActiveDocument.Sections(1).Range.Select
'ドキュメント(文書)内のすべてのセクションを操作します
Sub SectionAll()
Dim EachSection As Section
For Each EachSection In ActiveDocument.Sections
EachSection.Range.Select
Next
End Sub |
|
|
|
|
Wordでは入力し始めた先頭の文字から、段落記号(改行記号)までを1段落(パラグラフ)と数えます。
'ドキュメント(文書)内のパラグラフ(段落)の数をカウントします
MsgBox ActiveDocument.Paragraphs.Count
'1番目のパラグラフ(段落)を選択します
ActiveDocument.Sections(1).Range.Select
'ドキュメント(文書)内のすべてのパラグラフ(段落)を操作します
Sub ParagraphAll()
Dim EachParagraph As Paragraph
For Each EachParagraph In ActiveDocument.Paragraphs
EachParagraph.Range.Select
Next
End Sub
|
|
|
|
|
先頭の文字から、読点(。)で区切られた部分)、または、段落記号(改行記号)までを1センテンスと数えます。
'ドキュメント(文書)内のセンテンスの数をカウントします
MsgBox ActiveDocument.Sentences.Count
'1番目のセンテンスを選択します
ActiveDocument.Sentence(1).Select
'ドキュメント(文書)内のすべてのセンテンスを操作します
Sub SentenceAll()
Dim EachObj As Object
For Each EachObj In ActiveDocument.Sentences
MsgBox EachObj
Next
End Sub |
|
|
|
|
先頭の文字から、単語の最後の文字、または、読点(。)で区切られた部分)、または、段落記号(改行記号)までを1ワードと数えます。
'ドキュメント(文書)内のワード(単語)の数をカウントします
MsgBox ActiveDocument.Words.Count
'1番目のワード(単語)を選択します
ActiveDocument.Words(1).Select
'ドキュメント(文書)内のすべてのワード(単語)を操作します
Sub ParagraphAll()
Dim EachParagraph As Paragraph
For Each EachParagraph In ActiveDocument.Paragraphs
EachParagraph.Range.Select
Next
End Sub |
|
|
|
|
文字
'センテンス1内の文字数をカウントします
ActiveDocument.Sentence(1).Characters.Count |
|
|
|
|
'ドキュメント(文書)内のテーブル(表)の数をカウントします
MsgBox
ActiveDocument.Tables.Count
'ドキュメント(文書)内のすべてのテーブル(表)を操作します
Sub TableAll()
Dim EachTable As Table
For Each EachTable In ActiveDocument.Tables
MsgBox Replace(EachTable.Columns(1).Cells(1).Range.Text, vbCr &
Chr(7), "")
Next
End Sub |
|
|
|
|
文書内および、すべてのヘッダーとフッターに含まれる すべての図形を表します。
'文書内の図について順次評価する
Dim Shp As Shape
For Each Shp In ActiveDocument.Shapes
If Shp.Type = msoTextBox Then 'テキストボックス(17)の場合
Shp.TextFrame.TextRange.Font.Name = "Arial" 'フォント名(プロパティ)
Shp.TextFrame.TextRange.Font.Size = 14 'フォントサイズ(プロパティ)
ElseIf Shp.Type = msoCanvas Then '描画キャンバスの場合
ElseIf Shp.Type = msoGroup Then 'グループ化された図形(6)の場合
ElseIf Shp.Type = msoFreeform Then 'フリーフォーム(5)の場合
・・・
next |
|
|
|
|
Selection オブジェクトは、現在選択されている領域を表します。(マウス、プログラムで指定します)
Word のユーザー インターフェイスでテキストを太字にするなどの処理を行う場合に、テキストを選択、または強調表示してから、書式を適用します。
Selection オブジェクトは、文書内に常に存在しています。
テキストが選択されていない場合は、カーソル位置を表します。
1 つの選択範囲で、連続していない複数のテキスト
ブロックを囲むこともできます。
Selection メソッド MSDN |
|
|
|
|
Range オブジェクトは、文書内の連続した領域を表し、開始文字位置と終了文字位置によって定義されます。(プログラムで指定します)
Range オブジェクトは、1 つに限定されていません。
同じ文書内に複数の Range オブジェクトを定義できます。Rangeオブジェクトには次の特徴があります。
・単独のカーソル位置、テキストの範囲、または文書全体で構成されます。
・空白、タブ文字、段落記号などの非印刷文字を含みます。
・現在の選択範囲を表す領域、または現在の選択範囲とは別の領域を表すことができます。
・常に表示されている選択範囲とは異なり、文書内には表示されません。
・このオブジェクトは文書と共に保存されることはなく、コードの実行中にのみ存在します。 |
|
|
|
|
「オブジェクトへの参照を代入します(アドレスを持ちます)。オブジェクト変数は4バイトの領域を持ちます。
ex.
Sub Sample()
Dim wdApp As Object
Set wdApp = CreateObject("Word.Application.8")
MsgBox wdApp.Version
wdApp.Quit
Set wdApp = Nothing
End Sub
変数を使うことで、「Object)」などのう記述を省略できます。 |
|
|
|
|
ひとつのオブジェクトに対して複数のメソッドやプロパティを指定する場合、対象となるオブジェクト名を省略する記述法です。
With オブジェクト名/ユーザー定義型変数名
操作
End With
ex.
省略形を使用しない場合
Range("A1").FontColorindex = 3
Range("A1").FontSize = 20
省略形を使用した場合
With Range("A1")
.FontColorindex = 3
.FontSize = 20
End With |
|
|
|
|
文書の保存に関係なく、VBAプログラム実行が終わると破棄されます。
【Publicモジュールレベルの宣言】
プロジェクト内のどのモジュールでも有効
Public 変数名 As String
【Privateモジュールレベルの宣言】
同じモジュール内のどのプロセジャーでも有効
Private 変数名 As String
【プロセジャーレベルの宣言】
プロセジャー内でのみ有効
Dim 変数名 As String
【変数の型】
バイト型 Byte
整数型 Integer
長整数型 Long
単精度浮動小数点型 Single
倍精度浮動小数点型 Double
通貨型 Currency
日付型 Date
文字列型 String
ブール型 Boolean
バリアント型 Variant 型を規定しないデータ型(配列の宣言で指定することが多い)
オブジェクト型 Object、Control、Workbook、Worksheet、Range・・・・
ユーザー定義型
|
|
|
|
|
文書の保存に関係なく、VBAプログラム実行が終わると破棄されます。
【定数の宣言】
Const 定数名 As 型 = 定数
ex
Const A As String = "AAA"
改行マーク
CR = Chr(13) '改行コード for Macintosh
LF = Chr(10) '改行コード for Unix/Linux、UTF-8他
CRLF = Chr(13) & Chr(10) '改行コード for Windows
※メモ帳(Microsoft)
・メモ帳はUTF-8を認識するが、改行コードは文字化けする
・LFはメモ帳で開くと"↑"と表示される
※Chr関数は Unicode 文字を返します。(必ず 2 バイト文字を返します。)
|
|
|
|
|
文書の保存に関係なく、VBAプログラム実行が終わると破棄されます。
【静的配列】
要素の個数が定まっている配列。インデックス番号の既定値は0
ex
Dim AAA(9) As String '10の要素で構成
Dim AAA(9,10) As String '10×11の要素で構成
【動的配列】
宣言時に要素の個数が定まっていない配列。インデックス番号の既定値は0
ex
Dim AAA() As String
ReDim AAA(5) '実行時に5個の要素で構成する配列として宣言しなおす
ReDim Preserve AAA(10) '10個の配列に宣言し直す。これまでのデータは保持される
|
|
|
|
|
プロパティ
文書が保存される時にプロパティの内容もいっしょに保存される。
文書の利用者が追加、更新、削除をできる。
文書変数
文書が保存される時に文書変数の内容もいっしょに保存される。
文書の利用者が追加、更新、削除をできない。
フィールドで値を参照できる。
Word
VBA
で、Document.Variableを使って追加、更新、削除する。
☆詳細はマイクロソフトサポートオンラインを参照してください。
レジストリ
VBAオブジェクトのメソッドでVBA用の決められた場所を使う。
Systemオブジェクトのメソッドで好きな場所を使う。
文書の保存に関係なく値を保存できる。
保存するレジストリのキーがわかれば、文書の利用者が追加、更新、削除できる。
外部ファイル
任意のテキストファイルやXMLファイルに値を保存する。 |
|
|
|
|
算術演算子 ^(べき乗)、−(マイナス)、*(乗算)、/(除算)、¥(商)、Mod(余り)、
+(加算)、−(減算)
文字列連結演算子 &
比較演算子 =、<>、<、>、<=、>=、
Like演算子 Like
Is演算子 Is
論理演算子 Not,And、Or、Xor、Eqv、Imp |
|
|
|
|
文字の先頭にシングルクオテーション『'』を付ける |