Wordのページ中心位置に関する大いなる錯誤
偶然の一致だった
前回、コチラの記事で、
tmp = CLng(Word.PointsToMillimeters(objDoc_.PageSetup.PageWidth))では、ページ横幅の中心位置を割り出しているのだが、なぜこれで中心が割り出せるのか分からない。
などと書いていた。
だが、id:imihitoさんからのご指摘
PageSetupは余白を含んだページの大きさを取得する
にある通り。すなわち、
余白を含めたページ幅(単位はpoint)のmillimeter換算値が、たまたま余白を除いたページ幅の半分(単位はpoint)とだいたい同じだっただけ
というオソロシイことが判明www
無知とはオソロシイ……。
コードの改良 その1
そんなわけで、まずは
余白を除いたページ幅の半分の割り出し
をば。
ページの幅に関するプロパティは画像に示した通り。
また、
この画像の通り、
- X:余白を含めたページ幅
- Y:左余白
- Z:右余白
- a:ハンコ画像の幅
とすると、まず余白を除いたページ幅の半分は、
(X - (Y + Z)) / 2
で求めることができる。
ハンコ画像を中心に持ってくるためには、ハンコ画像の左端をハンコ画像の幅の半分だけページ中心位置からずらしたところに持ってきたら良いので、
(X - (Y + Z)) / 2 - a / 2
整理して
(X - (Y + Z + a)) / 2
とすれば良いはず。
リスト1
Dim wdPageSetup As Word.PageSetup '……(1)' Set wdPageSetup = objDoc_.PageSetup Dim tmpShape As Word.Shape '……(2)' Set tmpShape = objDoc_.Shapes.AddPicture(imgPath) '……(3)' With wdPageSetup tmpShape.Left = _ (.PageWidth - (.LeftMargin + .RightMargin + tmpShape.Width)) / 2 '……(4)' tmpShape.Top = -(.TopMargin / 2) '……(5)' End With
まず、(1)では、id:imihitoさんのアドヴァイスに従って、
Dim wdPageSetup As Word.PageSetup Set wdPageSetup = objDoc_.PageSetup
このように、WordのPageSetup型のオブジェクト変数を用意して、操作対象であるobjDoc_(Wordドキュメント)のPageSetupをオブジェクトとして格納している。へえ、こんなこともできるんですねえ。
んで、(2)。前回ハマったポイントです。
コチラは、id:imihitoさん、それからツイッターのフォロワーさんから一斉にツッコミが入ったポイントで、要するに、Excelさんの立場からすると
「Shape」ってオメー、それだけだとExcelのShapeだかWordのShapeだか分かんねーよ、バカ!!!!!!!!
ということのようですね。よく考えたら当たり前だ。だから、
Dim tmpShape As Word.Shape
と、WordのShapeであることを明示した。
id:imihitoさん、フォロワーさん、あざす!
(3)は、これまたid:imihitoさん、フォロワーさんの両方からご教示くださったポイント。お二方のアドヴァイスに従って、
Set tmpShape = objDoc_.Shapes.AddPicture(imgPath)
このように、いきなりハンコ画像を変数にセットした。実行時の挙動を見ていると、変数にセットするだけで勝手にLeft = 0, Top = 0の位置に配置されるようだ。一旦配置してからでないとダメだと思っていたのですよ。
これまたid:imihitoさん、フォロワーさん、あざす!
ここまできたら、後はハンコ画像の位置を決めるだけ。
まずは(4)の
tmpShape.Left = _ (.PageWidth - (.LeftMargin + .RightMargin + tmpShape.Width)) / 2
で左余白を除いたページ左端からの距離を定め、
(5)の
tmpShape.Top = -(.TopMargin / 2)
でハンコ画像の上端の位置を定めている。上余白の半分だけ上にめり込ませるような感じにした。
前回のリスト1に比べてなんとスッキリしたコードになったことか!
あらためてid:imihitoさん、フォロワーさん、あざす!
実行結果
実行してみた。
Wordドキュメントに、
まずハンコが設置され、
水平移動、
そして、垂直移動して完成。
って、ん……???
なんか、ちょっと右にズレとるぞ……。「斡旋決定通知書」という見出しは中央揃えにしているので、「定」に重なるはずなんだが……。
結論
今度こそ、なぜちょっとだけ右にズレるのか分かりませぬ……。