Word (VBA)

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

 
(Windows 10 Pro : その他)
入れ子状態の表での列番号
投稿日時: 21/06/25 20:06:43
投稿者: ストロベリー

Wordは365を使用しています。
 
テキストを検索して、入れ子状態のtableで見つかった時、一番外側のtableにおいての列番号を求めたいですが、
どうすれば求められるのでしょうか?
例えば、3行2列のtable1があって、table1.cell(2,2)の中に2行3列のtable2があります。
table2.cell(1,1)で検索したいテキストが見つかった場合、ここから見つかったテキストがtable1の2列目にあることを導きたいです。
 
説明がわかりにくいと思いますが、ご教授お願い致します。[/quote]

回答
投稿日時: 21/06/28 13:33:48
投稿者: sk

引用:
例えば、3行2列のtable1があって、table1.cell(2,2)の中に2行3列のtable2があります。
table2.cell(1,1)で検索したいテキストが見つかった場合、ここから見つかったテキストがtable1の2列目にあることを導きたいです。

当の検索処理は具体的にどのようなコードによって
実現されているのでしょうか。

回答
投稿日時: 21/06/28 15:02:45
投稿者: Suzu

Find 等の検索から、当該文字を検索できたとして、
それが、入れ子の Table の 子側の要素だったとき、子側の要素から、親側 を直接参照する方法が見つかりません。
 
Office VBA の考え方からすると、Parent を使えばと思いましたが、
Cell の Parent は、Documentオブジェクトとなっていまし、 どうしても辿れない。
  私の探し方が下手なだけかも知れませんが。。
 
 
どうせ、入れ子 との事なので、
親Tables コレクション 内の Table の Cell を列挙。
そのCell内の Tables コレクション から、 子Table を参照する。
  その 子Table の Range.Text には 子テーブルの 要素Text が、Chr(13) 区切りで入っている様なので
  その Text を元に、文字検索。
  
  Hit したら、そのときの Cell の ColumnIndex を得れば良い様です。

投稿日時: 21/06/28 15:23:43
投稿者: ストロベリー

range.Findを使って、テキスト検索をしています。

  Set rngX = wdDoc.Range
  rngX.Collapse (wdCollapseStart)
  
  With rngX.Find
    .ClearFormatting
    .Text = searchTxt
    .Forward = True
    .Wrap = wdFindStop
  End With

  Do While rngX.Find.Execute = True
  ' ここでrngXが2列目のデータであるかどうかを判断したい
  Loop

rngXが子tabelにある時、rngX.ParentがDocumentを指していて、rngX.columns.Parentは属しているtableを指していて、親tableにはいけません。
rangeの何かのプロパティから親tableに辿り着ければと思いましたが、Suzuさんが提案していただいた方法で検討してみます。
 
skさん、Suzuさん、ご回答ありがとうございました。