Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Excel 2019)
word文書の総ページ数について
投稿日時: 22/05/21 11:17:42
投稿者: WinArrow
投稿者のウェブサイトに移動

Excelvbaで、Word文書の総ページ数を取得しています。
ある特定の文書ファイルの総ページ数が、ExcelvbaとWordVBaで違うという場面に遭遇しました。
原因を特定する調査方法をご教示願います。
 
Excelvbaで取得した総ページ数は、13
WordVbaで取得した総ページ数は、11
実体は、11
 
問題のファイルは、内容は全く変更せずに、
.docを.docxで保存したものです。
.docの総ページ数は、Excelvba、Wordvbaともに、11です。
構造的には、10ページ目にExcelWorksheetへのリンクが設定されています。
このオブジェクトは、Excelの対象セル範囲をコピーし、Wordがでリンク貼り付けしています。
10ページ目のレイアウトは
2行の段落があり、2行目の段落の後に「改ページ」があります。
1行目と2行目の間にWorksheetオブジェクトを貼り付けています。(手作業)
貼付け時点では、
10ページ目:1行目の段落
11ページ目:Worksheetオブジェクト
12ページ目:2行目の段落
と3ページに分割されてしまうため、手作業で
Worksheetオブジェクトのサイズを調整して、1ページに収めるようにしています。
 
これは、.doc形式でも行っていたことです。
 
 
総ページ数取得コード
Excelvba
    Pcnt = wdDoc.Range.Information(wdNumberOfPagesInDocument)
または
    Pcnt = wdApp.Selection.Information(wdNumberOfPagesInDocument)
 
WordBA
    Pcnt = Selection.Information(wdNumberOfPagesInDocument)
 
総ページ数取得コードが間違っているとは、思えないので、
docとdocxの非互換かな?とも思っています。
何らかの対処方法があれば、アドバイスをお願いします。
 

回答
投稿日時: 22/05/22 06:27:05
投稿者: simple

回答ではありません。感想です。
「ページ番号を取得するWordマクロ」
https://www.ka-net.org/blog/?p=8654
を拝見すると、
ステータスバーに表示されるページ数に関して、
>たしかに、ステータスバーをよく見てみると、
>スクロール位置によっては微妙に上記マクロで取得できる番号とは異なる
>ページ番号が表示されています。
などと表現されています。
ページ番号、ページ数というのは、割と微妙なもののようです。
ひょっとすると、ユーザー側からの完全な解明はむずかしいものなのかもしれません。

回答
投稿日時: 22/05/22 12:27:11
投稿者: MMYS

最近は使う機会がないため知りませんが、以前、保存しておいたてファイルを開くと、総ページ数が正しく表示されないことは、よくありました。印刷で自動更新されると思ったら、間違ったまま、印刷された経験もあります。
そんな時は、総ページ数にカーソルを当てて、F9で手動更新してました。
 
総ページ数が更新されない-印刷プレビュー/F9キー
https://www.relief.jp/docs/000466.html
 
文書を印刷する前に自動的にフィールドを更新する
https://www.moug.net/tech/woopr/0120029.html
 
 
 
Word-VBAには、フィールドを更新するメゾットも用意されてます。総ページ数を取得する前に、フィールドの更新はされてますか。フィールド更新してから、取得すると解決するかも知れません。
 
Fields.Update メソッド (Word)
https://docs.microsoft.com/ja-jp/office/vba/api/word.fields.update
 
【ワードマクロ】フィールド更新できてる?自動確認の方法
https://kirinote.com/wordvba-fieldupdata/
 

回答
投稿日時: 22/05/23 07:39:10
投稿者: んなっと

こちらの環境では、下のコードを試すと3つとも同じ総ページ数を返します。
 
  wdDoc.Repaginate
  Debug.Print wdDoc.Content.Information(wdNumberOfPagesInDocument)
  Debug.Print wdDoc.ComputeStatistics(wdStatisticPages)
  Debug.Print wdDoc.ActiveWindow.Panes(1).Pages.Count

投稿日時: 22/05/23 10:33:42
投稿者: WinArrow
投稿者のウェブサイトに移動

皆さん、アドバイスありがとうございます。
 
いろいろ試してみたことを報告させて頂います。
.docを.docxに変換する作業について
(.docを開く → .docxで名前を付けて保存)
 
InlineShape.Height が、
VBAの場合、変更されない。
手作業の場合、変更されてしまうことが分かりました。(変更されないこともある。)
Worksheetオブジェクトに対する操作は何もしていません。
変更後のサイズによって、ページが分割されてしまいます。
 
あと、総ページ数の件とは関係ないですが、
「リンクオブジェクト」の自動更新を設定しているのに、
オブジェクトを変更しても、Word文書に自動で反映されないことがあります。
「オプション」で
開くときに更新する(他ファイルへのリンク設定の画面の表示は、回避できないようです)
印刷前に更新する
を設定しています。
 
開くときに、他ファイルへのリンクを更新するを選択したとき、
設定したファイルが存在しない(ファイル名変更等)場合、エラーメッセージは表示されません。

投稿日時: 22/06/12 08:08:37
投稿者: WinArrow
投稿者のウェブサイトに移動

最終的に
Word文書を開いて総ページ数取得処理を
ExcelVBAからWordVBAに変更しました。
なんとなく、すっきりしないが、とりあえず問題が出ていないので、
これで解決とします。
 
ご回答いただいた皆さんありがとうございました。