- ベストアンサー
Excelのマクロについて質問です。
ブックAのシートaの印刷に関する設定を、別のブックBのシートbにコピーするマクロを教えていただけませんか? 印刷に関する設定には、ページ設定で設定されるすべての情報です。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
このようなやり方でもできる事が解りました。 a そのものをコピーして、その上にb のセル全体をコピペ。a を削除してb ☞a に名前変更。 a の印刷情報が残ります。 ' Sub Macro2() Dim O As Object ' Set O = ThisWorkbook.Sheets("b") Workbooks("A.xlsx").Sheets("a").Copy After:=O O.Cells.Copy [A1] Application.DisplayAlerts = False Sheets("b").Delete ActiveSheet.Name = "b" End Sub
その他の回答 (3)
- SI299792
- ベストアンサー率47% (780/1631)
>1つ1つの項目の値を調べて記述が大変 私のプログラムをそのままコピペすればいいです。それとも信用できないのですか? 自分で調べないと気が済まない性格ですか? 私が信用できないなら、imogasi さんが上げたサイトを参考にして下さい。 長いプログラムが嫌なら、2番目に開けた方法があります。
- imogasi
- ベストアンサー率27% (4737/17069)
>印刷に関する設定 は、 With Worksheets("Sheet1") .PageSetup。 のように、シート単位の設定です。この認識は、質問者の>ブックAのシートaの印刷に関する設定、と合っていると思います。WorkBook単位ではないということ。 ーーー Pagesetupで設定できる項目は、 https://learn.microsoft.com/ja-jp/office/vba/api/excel.pagesetup のプロパティで示されている項目が全てのはずです。 ーー この項目を、VBEにコピーし、各項目について、「ブックAのシートaの印刷に関する設定」Pagesetupに出てくる対応項目に(VBAコードベースで設定し、=>各行右辺に、それらに定義済み定数をコピペ)再作成するのが早いと思います。 または、現状の「ブックAのシートa」のVBAコードだけをコピペするのも、どうでしょう。 その際は、記述のない、既定値はブックAのシートaとブックBのシートbは同じになると思います。 ーー 現状注目している項目だけ、一発的にソース的に、コピーする方法は提供されていないと思います。 一般論として、モジュールのエクスポートというのがあるようですが、使えるかどうかやったことがありません。 == 工夫すればVBEのVBAコードベースで同じものを、別に作る方法はありそうですが、普通は使われないのではないですか。 http://officetanaka.net/excel/vba/vbe/ VBAでVBEを操作する のような延長線の方法
お礼
大変ていねいな回答ありがとうございました。
- SI299792
- ベストアンサー率47% (780/1631)
マクロを入れるのはB [A.xlsx]a ☞[B.xlsx]b とします。 両方開いている前提です。 一度に入れるのは無理で、1つづつ入れていくしかないようです。 Option Explicit ' Sub Macro1() Dim I As Object ' Set I = Workbooks("A.xlsx").Sheets("a").PageSetup ' With Workbooks("B.xlsm").Sheets("b").PageSetup .PrintTitleRows = I.PrintTitleRows .PrintTitleColumns = I.PrintTitleColumns .PrintArea = I.PrintArea .LeftHeader = I.LeftHeader .CenterHeader = I.CenterHeader .RightHeader = I.RightHeader .LeftFooter = I.LeftFooter .CenterFooter = I.CenterFooter .RightFooter = I.RightFooter .LeftMargin = I.LeftMargin .RightMargin = I.RightMargin .TopMargin = I.TopMargin .BottomMargin = I.BottomMargin .HeaderMargin = I.HeaderMargin .FooterMargin = I.FooterMargin .PrintHeadings = I.PrintHeadings .PrintGridlines = I.PrintGridlines .PrintComments = I.PrintComments .CenterHorizontally = I.CenterHorizontally .CenterVertically = I.CenterVertically .Orientation = I.Orientation .Draft = I.Draft .PaperSize = I.PaperSize .FirstPageNumber = I.FirstPageNumber .Order = I.Order .BlackAndWhite = I.BlackAndWhite .Zoom = I.Zoom .PrintErrors = I.PrintErrors .OddAndEvenPagesHeaderFooter = I.OddAndEvenPagesHeaderFooter .DifferentFirstPageHeaderFooter = I.DifferentFirstPageHeaderFooter .ScaleWithDocHeaderFooter = I.ScaleWithDocHeaderFooter .AlignMarginsHeaderFooter = I.AlignMarginsHeaderFooter .EvenPage.LeftHeader.Text = I.EvenPage.LeftHeader.Text .EvenPage.CenterHeader.Text = I.EvenPage.CenterHeader.Text .EvenPage.RightHeader.Text = I.EvenPage.RightHeader.Text .EvenPage.LeftFooter.Text = I.EvenPage.LeftFooter.Text .EvenPage.CenterFooter.Text = I.EvenPage.CenterFooter.Text .EvenPage.RightFooter.Text = I.EvenPage.RightFooter.Text .FirstPage.LeftHeader.Text = I.FirstPage.LeftHeader.Text .FirstPage.CenterHeader.Text = I.FirstPage.CenterHeader.Text .FirstPage.RightHeader.Text = I.FirstPage.RightHeader.Text .FirstPage.LeftFooter.Text = I.FirstPage.LeftFooter.Text .FirstPage.CenterFooter.Text = I.FirstPage.CenterFooter.Text .FirstPage.RightFooter.Text = I.FirstPage.RightFooter.Text End With End Sub
補足
>一度に入れるのは無理で、1つづつ入れていくしかないようです。 やっばり、そうなんですか… 1つ1つの項目の値を調べて記述が大変なので、一気にコピーする方法はないかと思ったのですが…
お礼
先ほどは失礼いたしました。m(_ _)m 出先でスマホで見ただけでしたので勘違いしました。 それにしてもこの方法は素晴らしいです。 目から鱗というか、コロンブスの卵というか、ゴルディアスの結び目というか… こんな方法でできるとは驚きました。 ありがとうございました。