Word (VBA)

Word VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 10 Pro : Word 2016)
複数ファイルのテキストボックスを一括で整列したい
投稿日時: 20/09/10 11:25:25
投稿者: nonosawa

複数のテキストボックスを張り付けしたファイルが大量にあり、
張り付けられているテキストボックスですが、そのすべてが微妙に大きさが違い、配置もずれています。
これをすべて同じ大きさに修正し、等間隔に配置したいと思っています。
 
今まで手作業で画像サイズを修正し、整列をかけていましたが、
あまりに手間がかかるので、一括でどうにかできないかと思っています。
 
親フォルダ┬フォルダ1┬ファイルA.doc
          │      └ファイルB.doc
     ├フォルダ2┬ファイルA.doc
          │      └ファイルB.doc
     └フォルダ3┬ファイルA.doc
                 └ファイルB.doc
 
上記のような構成になっており、ファイルBのみにテキストボックスが張り付けられています。
(わかりやすくするためにファイル名をABとしていますが、すべてファイル名は異なっています)
また、バージョンが.docになっているため、ついでに.docxに変換することもできればいいなと考えています。
 
pythonかvbaを使えばできるのだろうと思いますが、
私にプログラムをコピペして使う程度の知識しかなく、色々調べてみましたが、まったくお手上げです。
お知恵をお借りできれば幸いです。

回答
投稿日時: 20/09/10 16:50:41
投稿者: QooApp

引用:
(わかりやすくするためにファイル名をABとしていますが、すべてファイル名は異なっています)

 
まず、ファイル名A/Bとなる2つのファイル名に明確な違いがありますか。
 
ある場合、
 IF(ファイル名の判定条件)then
ファイルAならスキップ
ELSE
 ファイルBに処理を行う
ENDIF
 
ない場合、
IF(Application.Documents(1).Range.ShapeRange.Count > 0)then
 すなわちファイルB?
ENDIF
 
上記をどっちかで達成しますか?
 
テキストのサイズと座標ですけど
 
 
Set a = Application.Documents(1).Shapes(何個めか数字が入る。for文でカウントしていけば繰り返し処理ができるのは)
 
With a
    .Top = Y
    .Left = X
    .Height = Size Y
    .Width = Size X
End With
 
上記コードでテキストボックスの座標が変わると思います。
1個めの座標は〜サイズは〜とfor文で繰り返せばいんじゃないですかね。
 
ただ、やればわかると思いますが、テキストボックスが生成された順番で位置が決定していきます。
つまり、途中で「あ、このボックスいらね」とか「足りないから中間にふやそ」とやると順番がめちゃくちゃになります。
 
どうやって基準にするかはご自身でお決めください。テキストボックスの最初の4文字をテキストボックスの掲載順序の数字(0001,0002,0003,0004,0005....)と書いておいて、LEFT関数で4文字から番号を取得して連番としたり、工夫次第でいくらでもできます。(.TextFrame.TextRange.Textからボックス内のテキストが取得できますよね)
 
と、一通り達成のための足掛かりにはなると思いますので頑張ってください。
ソースコード書くと利用規約に引っかかるので私は書けません。

投稿日時: 20/09/17 09:17:47
投稿者: nonosawa

回答ありがとうございます。レスが遅くなり申し訳ございません。
実現できるかどうか不明だったので、ヒントをいただき、視界が開けました。
この機会にきちんとVBAを勉強したいと思います。
 
行き詰ったときには、またこの場でお伺いするかもしれませんが、
その時はどうぞよろしくお願いいたします。

回答
投稿日時: 20/09/17 09:55:52
投稿者: Suzu

引用:
複数のテキストボックスを張り付けしたファイルが大量にあり、
張り付けられているテキストボックスですが、そのすべてが微妙に大きさが違い、配置もずれています。
これをすべて同じ大きさに修正し、等間隔に配置したいと思っています。

 
そもそも、テキストボックス である必要があるのでしょうか?
 
希望を拝見すると、
挿入時にテキストボックスではなく「表」にて処理した方が良い様に見えるのですが。。

投稿日時: 20/09/17 15:11:26
投稿者: nonosawa

>Suzuさん
 
ご指摘ごもっともなのですが、客先の指定書式がテキストボックスの為、変更ができないのです。

回答
投稿日時: 20/09/23 11:24:16
投稿者: Suzu

整列する対象は、テキストボックス全てなのか、違うのであればどうやって決めるか
 
現実的な方法としては、配置されている元位置から整列する順番を決めて配置する形でしょう。
 
そうではないのであれば、
 
整列するのに、その対象のテキストボックスをコード上で
 どう取得し
 どのような基準で並び順にするか
 
を明確にし、その実現の為にどの様なロジックとなるのか考える必要があります。
 
 
上記に比較し、
・複数フォルダの複数ドキュメントに対して
    (DIR関数 再起処理、FileSystemObject 辺りをキーワードにすれば検索できるでしょう)
・docにて保存
はWEB上にサンプルは結構あるでしょう。
 

引用:
私にプログラムをコピペして使う程度の知識しかなく
なのであれば難易度としてはかなり高くなりますが、実現は可能です。
 
がんばってください。

トピックに返信