Word (VBA)

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

 
(Windows 10 Pro : Word 2019)
差込印刷 ルールのイールドコードについて
投稿日時: 24/08/05 11:25:59
投稿者: WinArrow

差込印刷のフィールド設定時の改ページ「ルール」を設定しています。
フィールド名:GPNO
   
設定時:NEXT RECORD IF で GPNO<>""を指定しています。
   
画面表示は、「«Next Record If»」しか見えませんので
フィールドコードの表示 または [Alt]+[F9]での表示内容
 { MERGEFIELD GPNO } <> """" }
 
これ自体は問題ありませんが、
時々、「GPNO」のところに「102-01-01」のような文字列が表示されることがあります。
この文字列もフィールド定義時のデータの値なのですが、
なぜ、このような表示になるのか?が疑問です。
   
また、VBAでフィールドコードを取得してみると。
フィールド名が、「102-01-01」というフィールド名が出てきます。
なぜ、このような表示になるのか疑問です。
   
ご存知の方は、解説をお願い致します。
 

回答
投稿日時: 24/08/05 14:40:07
投稿者: Suzu

引用:
時々、「GPNO」のところに「102-01-01」のような文字列が表示されることがあります。
この文字列もフィールド定義時のデータの値なのですが、
なぜ、このような表示になるのか?が疑問です。

GPNO のところ というのは、
 
「GPNO」が フィールド名であり、フィールド名が、
102-01-01 に書き換わるという事なのでしょうか?
 
NEXT RECORD IF を指定しなかったら?
別の GPNO のデータは表示されない?
 
引用:
また、VBAでフィールドコードを取得してみると。
フィールド名が、「102-01-01」というフィールド名が出てきます。
なぜ、このような表示になるのか疑問です。

 
どう取得したのでしょうか?
 
 
回答者の目線で質問文をごらんになってみてください。
疑問に対してその原因を探るには、提示いただいた情報では 足りないですよね。
いちど冷静になってみましょう。
 
思った動作にならず、奇妙な動作になる事があり、テンパって 思考順が変になる事が多くあります。
調べてみると、不具合の事は間々ありますから、最近はそれを突き詰めても。。。
と思ってしまっています。
 
WinArrowさんであれば、差し込みを使うより、
Excel側から、Word を使ってしまうとか。
VBAを使った方が早いのではないでしょうか?

回答
投稿日時: 24/08/05 18:37:28
投稿者: sk

引用:
時々、「GPNO」のところに「102-01-01」のような文字列が表示されることがあります。

単にフィールドコードが入れ子になってるだけなのではないかと。
 
引用:
なぜ、このような表示になるのか?が疑問です。

フィールドコードの表示/非表示はそれぞれのフィールドごとに
切り替えることが出来ますので、「親フィールドのコードを表示」
かつ「子フィールドのコードを非表示(=計算結果を返す)」という
状態になることは普通にあり得ます。

投稿日時: 24/08/06 17:32:54
投稿者: WinArrow

ご回答ありがとうございます。
 
フィールド解析VBA(word)は、次の通りです。
 

Sub test()
Dim fld, tx As Long
Dim myCell

    With ActiveDocument
        For Each fld In .Fields
            Debug.Print fld.Index & ":" & fld.Result.Text & ":" & fld.Code.Text
        Next
    End With
   
End Sub

その結果は
引用:

1:≪記号≫: MERGEFIELD 記号
2:≪隣組≫: MERGEFIELD 隣組 \* DBCHAR
3:≪巡目≫: MERGEFIELD 巡目
4:≪期間≫: MERGEFIELD 期間
5:≪回数≫: MERGEFIELD 回数
6:≪P分割≫: MERGEFIELD P分割
7:≪集積所≫: MERGEFIELD 集積所
8:≪計画書≫: MERGEFIELD 計画書
9:≪計画書≫: MERGEFIELD 計画書
10:≪利用者戸数≫: MERGEFIELD 利用者戸数
11:≪割当可能戸数≫: MERGEFIELD 割当可能戸数
12:≪前≫: MERGEFIELD 前
13:≪配付期限≫: MERGEFIELD 配付期限
14:≪自≫: MERGEFIELD 自
15:≪経由≫: MERGEFIELD 経由
16:≪次≫: MERGEFIELD 次
17:≪隣組長名≫: MERGEFIELD 隣組長名
18:≪年≫: MERGEFIELD 年 \* DBCHAR
19:≪コメント1≫: MERGEFIELD コメント1
20:≪RNO≫: MERGEFIELD RNO
21:≪当番日≫: MERGEFIELD 当番日 \@ M/d
22:≪曜日≫: MERGEFIELD 曜日
23:≪分別≫: MERGEFIELD 分別
24:≪済≫: MERGEFIELD 済
25:≪備考≫: MERGEFIELD 備考
26:≪Next Record If≫: NEXTIF  MERGEFIELD GPNO  <> """"
27:104-01-01: MERGEFIELD GPNO
28:≪RNO≫: MERGEFIELD RNO
29:≪当番日≫: MERGEFIELD 当番日 \@ M/d
30:≪曜日≫: MERGEFIELD 曜日
31:≪分別≫: MERGEFIELD 分別
32:≪済≫: MERGEFIELD 済
33:≪備考≫: MERGEFIELD 備考

実際にはIndex134まであるが、27〜33の繰り返しのため、割愛しました。
問題の個所は、Index:26と27です。
Index:26は、入れ子になっています。□は「{」「}」です。
入れ子になっているフィールドが、index:27に展開されていると思っているが、
フィールド名がデータの値になっているのは、仕様なんですかね?
 

回答
投稿日時: 24/08/07 11:10:18
投稿者: sk

引用:
問題の個所は、Index:26と27です。
Index:26は、入れ子になっています。

引用:
Debug.Print fld.Index & ":" & fld.Result.Text & ":" & fld.Code.Text

・差し込み文書の[結果のプレビュー]をオフにしている。
 
・全てのフィールドコードを表示している。
 
という状況でそのマクロを実行されたのであれば、
正常な挙動だと思います。
 
引用:
NEXTIF  MERGEFIELD GPNO  <> """"

その Word ドキュメント上の上記のフィールドにカーソルを移動させ、
ショートカットメニューから[フィールドコードの表示/非表示]を
クリックしてフィールドコードを非表示にすると、≪GPNO≫のような
フィールド名ではなく、参照元のフィールドの値("102-01-01")が
表示されるはずです。
 
・差し込み文書のプレビューがオフになっている状態において、
 本文に挿入された MERGEFIELD の結果は、参照元のフィールド名が
 二重山括弧付きで表される。
 
・差し込み文書のプレビューがオフになっている状態において、
 別のフィールドコード内に挿入された(入れ子になっている)
 MERGEFIELD の結果は、参照元のフィールドの現在のレコードの
 値で表される。

投稿日時: 24/08/07 16:44:58
投稿者: WinArrow

「フィールドコードの表示」で
データの値が表示された現象は、
入れ子になっていた部分を選択したということが分かりました。
なんとなくですが、状況が分かりました。
アドバイスありがとうございました。
Wordにも。Excelでいう「数式バー」の機能があるとよい・・・・ですね
納得です。
 
閉じます。