Home » ワードマクロ・Word VBAの使い方 » Selection » Word VBAでSelection.WholeStoryを変数に??

Word VBAでSelection.WholeStoryを変数に??

動作検証バージョン:64bit Windows 10 Pro + 32bit Word(バージョン2004 ビルド12730.20236 Microsoft Store)

Word VBAではメソッドの戻り値を変数に代入するのではなく、状態をメソッドで変更するケースが結構あります。
Excel VBAに慣れている方がWord VBAを学習しはじめたとき、このタイプのメソッド・オブジェクトに戸惑うように感じています。

Word VBAのもっとも主要なオブジェクトであるSelectionRangeが、このタイプのオブジェクトに該当します。

Selection.WholeStoryに戻り値はない

「Selection.WholeStory 変数」
という検索でこのサイト『インストラクターのネタ帳』へアクセスした方も、そのケースだったのではないかと私は考えています。

勝手な推測ですが、以下のようなコードを書いてみたものの、

Sub WholeStoryを変数に_コンパイルエラーが発生してしまうケース()
 ActiveDocument.Range(0, 0).Select

 Dim sel As Selection
 Set sel = Selection.WholeStory
End Sub

「Functionまたは変数が必要です。」
コンパイルエラーが発生したのではないかと想像しています。

Selection.WholeStoryは戻り値のないメソッド

オブジェクトブラウザーの詳細ペインに「Sub WholeStory」と表示されているとおり、SelectionオブジェクトのWholeStoryメソッドには、そもそも戻り値がありません。

Selection.WholeStoryメソッドに戻り値がないにも関わらず、

Set sel = Selection.WholeStory

のように代入文にしているため(文法的に間違っていますから)、コンパイルエラーが発生します。

Selection.WholeStoryの結果を変数に反映させるサンプル

Selection.WholeStoryメソッドの結果をオブジェクト変数に反映したいのであれば、代入文にするのではなく、以下のようなコードです。

Sub WholeStoryを変数に()
 ActiveDocument.Range(0, 0).Select

 Dim sel As Selection
 Set sel = Selection
 sel.WholeStory
End Sub

事前にSelectionプロパティの戻り値であるSelectionオブジェクトをオブジェクト変数に代入しておいて、

Dim sel As Selection
Set sel = Selection

SelectionオブジェクトのWholeStoryメソッドで本文全体に選択範囲を広げます。

sel.WholeStory

これでオブジェクト変数selに格納されているSelectionも変化します。

Selection.WholeStoryの結果を確認する

初めて上記のコードをご覧になった方は、なかなか肚落ちしないかもしれません。

拙著でも多用しているローカルウィンドウを使って、オブジェクト変数selの中身を確認しながらステップ実行してください。

中身の確認に向いているのは、Selectionオブジェクトの既定メンバーであるTextプロパティです。

オブジェクトブラウザーで既定メンバーがどう表示されるのかも、PowerPointの場合と同じです。

まず確認すべきは、

Set sel = Selection

を実行した直後のTextプロパティの値です。

上図は、アクティブな文書の先頭に
「Word に用意されているヘッダー、フッター、表紙、テキスト ボックス デザインを組み合わせると、プロのようなできばえの文書を作成できます。」
という文が入力されているときの状態です。

この時点では、

ActiveDocument.Range(0, 0).Select

で移動したアクティブな文書の先頭が選択されているので、文書の先頭1文字「W」だけが、Textプロパティで取得できています。

つづいてこの記事でご紹介しているSelection.WholeStoryメソッドを実行すると、下図のようにTextプロパティの値は変化します。

ローカルウィンドウでは表示しきれませんけれど、Selection.WholeStoryメソッドを実行することで取得した本文全体の文字列が、Textプロパティの値に表示されています。

これは、Selection.Textプロパティのみの値が変化したのではなく、WholeStoryメソッドが実行されたことによりSelectionオブジェクト自体が変化しています。

Word VBAを使うのなら、こういったタイプのオブジェクトやコードに少しずつ慣れていきましょう。

最終更新日時:2024-03-01 06:12

[スポンサードリンク]

Home » ワードマクロ・Word VBAの使い方 » Selection » Word VBAでSelection.WholeStoryを変数に??

「Selection」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.