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

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

ExcelVBA VBAでワークシートをコピーした時印刷レイアウトが思うとおりにならない件の対処

仕事上ちょっと困ってて,対処ができたので備忘録としてメモ

印刷レイアウトをこまかくきちんと設定したシートを新しいブックにコピペしてるのに,印刷範囲からはみ出してしまうという現象にわたしは数度遭遇しています。

VBAじゃなくて手動でするときはそうならないこともあるんですが,VBAでやると大幅にはみだしたりしてる。

列幅やページ設定等が変わったのなら,まだ対処は考えやすいんですが,そのへんはきちんと保持されているんです。

なので,どうしたらいいのか途方にくれていたり放置していたんですが,放置するわけにはいかない仕事がありまして,

その対処をまじめに調べたりしてたら対処できました。

原因は,一言でいうとスタイル設定が一致していないせいみたいです。

なので,VBAを使わないひとであれば,元にしたいワークブックと,スタイル設定が崩れてしまったワークブックを開いた状態で 

崩れた方から
 ホーム → スタイル →(スタイル一覧の下の方の)スタイルの結合
としてあげると,たぶん想定通りの印刷範囲が実現されます。

f:id:chemiphys:20180206211624p:plain

で,これをVBAで対処したのが

Sub a()
Dim PWB As Workbook: Set PWB = Workbooks.Add
Application.DisplayAlerts = False
    PWB.Styles.Merge Workbook:=ThisWorkbook
Application.DisplayAlerts = True

ThisWorkbook.Worksheets("テスト").Copy after:=PWB.Worksheets(PWB.Worksheets.Count)
Dim PSht As Worksheet: Set PSht = ActiveSheet

End Sub

時間があまりないので説明がほとんどないのはすみません。

PWBってのに新しくワークブックつくって放り込んで,そこにマクロが書かれたブックからシートをコピペしているだけです。
作られたブックには,きちんとスタイルの結合をしているので,たぶんレイアウトは崩れない。

DisplayAlertsを設定しているのは 結合していいかっていうダイアログがうざいからです。
メモおわり。。

ところで,

ThisWorkbook.Worksheets("テスト").Copy after:=PWB.Worksheets(PWB.Worksheets.Count)
Dim PSht As Worksheet: Set PSht = ActiveSheet

この部分を一文で表したいんですが,どこかが悪いらしく私が書くとエラーになってしまいます。

スマートな書き方ありませんか・・(´;ω;`)