MW211 EXIT

devlog
ExcelVBA/図形をヘッダに
2021年10月24日
印刷範囲の大きさに応じて、印刷倍率を変更する設定とした場合
当然だが、シート上の図形もその影響を受けて縮小される。

これを避けるために、ヘッダ(もしくはフッタ)に置いて
拡大縮小の影響を受けないようにしたらよいのではないか?

と考えてが、ヘッダに単なる画像ファイルを出力するのは簡単でも
図形を出力するのは難儀を極める。

まず、そのままでは無理なようだ。

ということで、図形を画像ファイルとして一旦エクスポートして
それを参照する形で対処してみた。(画像ファイルの削除はご自分で)

なお、図形を画像ファイルとして出力するにもそのままでは無理で
チャートを作成し、そこに貼り付けて、出力する形をとらざろうえないようだ。
┌──────────────────────────────────────┐
│Dim 図形 As Shape, チャート As Object                                       │
│With ActiveSheet                                                            │
│    '-----------------------------------------------------------------------│
│    '  図形を画像ファイルとしてエクスポート                                 │
│    '-----------------------------------------------------------------------│
│    Set 図形 = .Shapes(図形名)                                              │
│    Set チャート = .ChartObjects.Add(0, 0, 図形.Width, 図形.Height)         │
│    図形.CopyPicture Format:=xlBitmap                                       │
│    With チャート                                                           │
│        .Select                                                             │
│        .Chart.Paste                                                        │
│        .Chart.Export Filename:=ThisWorkbook.Path & "\一時.jpg"             │
│        .Delete                                                             │
│    End With                                                                │
│    '-----------------------------------------------------------------------│
│    '  エクスポートした画像ファイルをヘッダに                               │
│    '-----------------------------------------------------------------------│
│    With .PageSetup                                                         │
│        .LeftHeaderPicture.Filename = ThisWorkbook.Path + "\一時.jpg"       │
│        Application.PrintCommunication = False  ' プリンタ設定開始(通信切断)│
│        ' 上余白                                                            │
│        .TopMargin = 図形.Height                                            │
│        ' 「&[図]」を表示                                                   │
│        .LeftHeader = "&G"                                                  │
│        ' 「ドキュメントに合わせて拡大/縮小」しない                         │
│        .ScaleWithDocHeaderFooter = False                                   │
│        Application.PrintCommunication = True   ' プリンタ設定終了(通信復旧)│
│    End With                                                                │
│    '-----------------------------------------------------------------------│
│End With                                                                    │
└──────────────────────────────────────┘
つまり、以下の課題を解決しないと実現できないという結構な難題だ。
(1) ヘッダに図形を出力したい
(2) そのためには、図形を画像ファイルにする必要がある
(3) そのためには、図形をチャートに貼り付ける必要がある
分類:ExcelVBA