拙著『Excel VBAユーザーのためのWord VBA入門(1)』では、Newキーワードを使ってWord文書とは無関係のオブジェクト変数を使って設定を行うサンプルをご紹介しています。
Newしたオブジェクト変数をプロパティに代入するサンプル
「4-5. WordではFontプロパティで設定もできる」では、以下のようなRange.FontプロパティにFont型オブジェクト変数を代入することで設定する例を、
Sub Font型変数をNewして設定する() Dim fon As Font Set fon = New Font fon.Size = 24 fon.Name = "HG明朝E" ActiveDocument.Range(0, 1).Font = fon End Sub
「5-4. ParagraphFormatで設定もできる」では、以下のようなRange.ParagraphFormatプロパティにParagraphFormat型オブジェクト変数を代入する例をご紹介しています。
Sub ParagraphFormat型変数をNewして設定する() Dim par_fmt As ParagraphFormat Set par_fmt = New ParagraphFormat par_fmt.LineSpacingRule = wdLineSpaceExactly par_fmt.LineSpacing = 24 ActiveDocument.Range(0, 1).ParagraphFormat = par_fmt End Sub
Newしたオブジェクト変数をプロパティに代入する際にSetは不要
これらのコードで、Fontプロパティ・ParagraphFormatプロパティにオブジェクト変数を代入する行に、Setキーワードが必要なのではないかと考える方がいらっしゃるかもしれません。
Word VBAで、こういったコードでSetキーワードは不要です。
上記2つのSubプロシージャの、
ActiveDocument.Range(0, 1).Font = fon
ActiveDocument.Range(0, 1).ParagraphFormat = par_fmt
に、以下のようにSetキーワードを付加して実行してみると、
Set ActiveDocument.Range(0, 1).Font = fon
Set ActiveDocument.Range(0, 1).ParagraphFormat = par_fmt
いずれも
実行時エラー '438'
オブジェクトは、このプロパティまたはメソッドをサポートしていません。
実行時エラーが発生します。
Access VBAでは、こういった戻り値がオブジェクトのプロパティにNewしたオブジェクト変数を代入するときに、Setキーワードをつけてもつけなくても動作する例を私も見たような記憶があるのですが(曖昧でごめんなさい)。
Home » 電子書籍 » Excel VBAユーザーのためのWord VBA入門 » Word VBAでNewしたオブジェクト変数を代入する際にSetは不要