インストールレスプログラミング( ´ー`)

VBA , JavaScript , HTAなど 365アプリはインストール必要ですが、仕事に無いケースはほぼないから(・_・;)

異体字に負けにくいWordでの話。

フォントに含まれる字はアプリケーションに依存しないで表示・印刷できると今まで信じていましたが,違うことに今日困らされました。

環境依存文字ったって,Officeでは共通して使えるだろうと思ってましたが,Wordでは出るけどExcelでは出ないとかPublisherでは出るとか,いろいろ。。

Excelがそういう面では汎用性は良くなく,wordがそういうときは強いなぁと感心しながら作ってましたが,

360名分の名簿を表に入れてWordで手動でいじってると 重たい重たい(;´▽`A``

家で試したら,職場で思ったほどの差はなく,365と2016の違いがあるのかなぁと悩みどころでもあるんですが,外字が使えない職場ではそれなりに戦うしかありません。


軽さではPublisherも惹かれました。レイアウトも崩れにくいし,VBAexcel,word,powerpointVBAで遊んでいたせいか,すんなり制御できそう。

ただPublisherというだけで引く人もいる職場です。他のに比べれば私らの職場ではマイナー。

なのでWordの制御をしてみました。

重くなる原因でもありますが,レイアウトフリーでWord上に多数の表を貼り付ける場合,テキストボックスをまず入れて,その中にテーブルを入れてということをします。

テキストボックスに Txt1 という名前をつけて,その中に表を二つ入れている状態で制御した例です。
f:id:chemiphys:20180313222934p:plain

そういうときの,テキストボックス内のテーブルにアクセスするコードは書いたことが無かったのでとても新鮮でした。

Sub a()

    Dim TBL1 As Table, TBL2 As Table
    With ActiveDocument.Shapes("Txt1").TextFrame.ContainingRange
        Set TBL1 = .Tables(1)
        Set TBL2 = .Tables(2)
    End With

    TBL1.Rows(1).Cells(2).Range.Text = "5"
    
    TBL2.Rows(2).Cells(1).Range.Text = "6"
Stop

End Sub

いつも雑でStopなんかも入れっぱなしですがこんな感じでアクセス可能でした。

ContainingRangeってのは初めて見ましたね。

マクロで表のテンプレートをどんどんコピーして(Duplicateでいけました)座標も調整して,データをExcelから流し込んで,とやってみると,

Excelの苦手分野である印刷と画面表示が違うという困難を乗り越えられる感触が得られました。


Wordで書式を与えられると,Excelで作り直して・・・とされている方々はWordのVBAもやってみることをお勧めしたいと思います。

だいぶ制御できるようになり,とても仕事が楽になったなぁと思う今日この頃です。

ContainingRangeの備忘録として書きました。

テーブルにアクセスするときは

TBL1.Cell(1, 3).Range.Text = "4"

こういう書き方のほうが,Excelpowerpointに近いですね。
なぜか上では違う書き方をしてしまった。適当さが出てしまう(;´▽`A``