質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Word

Microsoft WordはMicrosoftが開発した業務用の文書生成用のソフトウェアです。

Q&A

解決済

2回答

3087閲覧

Word vbaで、ページ毎に異なる「(セクション1の)ヘッダー」文字列を取得したい

taurus

総合スコア31

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Word

Microsoft WordはMicrosoftが開発した業務用の文書生成用のソフトウェアです。

0グッド

0クリップ

投稿2017/08/15 12:26

ご覧いただき、ありがとうございます。

Wordにて、ページ毎に異なる「ヘッダー」を持つドキュメントファイルを分割する際に、ファイルネームとして、その「ヘッダー」の文字列を取得したい。

wdHeaderFooterPrimaryでは、どうも初めのヘッダーの文字列しか、取得できない。処理するページが進んでも、そのページのヘッダー文字列を取得できません。

Rangeに問題があるのかとは思っていますが、MSのサイトなども調べましたが、自分では解決策を見つけることができませんでした。
実現したいのは、実際に処理中のページ(アクティブページ)のヘッダーの文字列を取得したい。

以下、最初のヘッダーの文字列を取得するためのコードです。

Word

1WordDocument.Sections(1).Headers(wdHeaderFooterPrimary).Range.Text

これは、正しく取得できますが、処理するページが変わり、セクション1ヘッダーの文字列が変わっても、常に同じ最初の値を返してきます。
上記のコードを、ループの中で、アクティブページが移動するたびに実行しています。

同様の経験のある方や、VBAグールーの方のお力をお借りできれば幸いです。
以上、よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

  1. 変数xを宣言して値を代入する
  2. Replace()などの別の関数で、文字列操作する場合には、明示的に ActiveDocument. など範囲を指定する。

ActiveDocument.Sections(x).Headers(wdHeaderFooterPrimary).Range.Text

例:セクションヘッダーの文字列を取得して、改行コードを除去する

Replace(ActiveDocument.Sections(x).Headers(wdHeaderFooterPrimary).Range.Text, vbCr, "")

投稿2017/08/17 10:57

taurus

総合スコア31

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

処理するページが変わり、ヘッダーを含むセクションが変わるのであれば、
セクション1ではなくセクション2などに変わっていくのではないでしょうか?
なので、コードとして
WordDocument.Sections(1).Headers(wdHeaderFooterPrimary).Range.Text
がセクション1(Sections(1))のヘッダー文字列を取得できているのであれば、
WordDocument.Sections(2).Headers(wdHeaderFooterPrimary).Range.Text
WordDocument.Sections(3).Headers(wdHeaderFooterPrimary).Range.Text

と数字が増加していけばよいわけです。
おっしゃるようにループの中でこの数字部分が増加するようにしてみてはいかがでしょうか。

投稿2017/08/15 14:22

kjml

総合スコア219

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taurus

2017/08/17 10:41

直ぐにご回答いただいたのに、レスが遅くなり申し訳ございません。 早速、セクションの指定をループの中で変数にて指定することで、欲しかった値が取得できるようになりました。ご教授ありがとうございます。 当方のVBA不勉強によるところですが、Withを使ってのActiveDocument.の指定が、別の関数内部では使えないことも原因でした。 ご協力とご教授、誠にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問