2022年12月6日火曜日

オートシェイプのプロパティ設定で、セルの影響を受けないようにしないと、テキストボックスがずれまくりだ ー ChartObjectのPlacement(VBA)

    
おことわり
この投稿は、書いた後で、VBAの挙動が思わしくありませんでした。
ですが、失敗事例で参考にアップしますので、斜め読みでもしてください。

エクセル内で、テキストボックスを設けて、タックシールを印刷する工夫です。
VBAでコードを書き込んで、ブックを開いたら各シェイプの位置を再設定する。

何かの拍子でシェイプを選択して、誤って動かして位置がずれるとも限らない。
だから、念には念を入れて、コードからシートを保護する設定もしてみました。

実際、シェイプにデータを書込む時は、一旦、保護を解除する工夫も加えます。
こうして、万全の対策を施したのに、微妙に位置が動いているような気がする。

どうしてなのかと思っていたら、シートを印刷するページの行数が変化します。
理由は分からないが、ジャスト1ページ分に収められる行数は計算したつもり。

ところが、行幅はスタンダードの高さにして、ブックを開いた時も再設定した。
この時、書いたコードは簡単なものですが、デフォルトの設定に戻すとき便利。

  Sub ActvShtRwHght()
    Rows("1:70").RowHeight = ActiveSheet.StandardHeight
    Columns("A:Z").ColumnWidth = ActiveSheet.StandardWidth
  End Sub

一方、用紙のサイズから、上下の印刷余白を除いた領域が、行を表示できます。
ここで、行の標準高さは13.5ポイントですが、1インチ72ポイントのスケール。

1ポイントは約0.35mmですが、若干の端数が出て、割り切れない数値なんだ。
他方、印刷余白はセンチで指定しますが、マクロの記録で設定を取ると面白い。

  With ActiveSheet.PageSetup
      .TopMargin = Application.InchesToPoints(0.748031496062992)
      .BottomMargin = Application.InchesToPoints(0.748031496062992)
  End With   

上部の印刷余白を、センチ指定ならインチで表すと、小数点以下が半端ないな。
なので、このような端数を累積すると、結果的に一行はみ出すようになるのか。

そんな気もして、だったら、印刷領域は三行だけにして微調整して表示させる。
次にブックを開いた後、印刷領域の印刷ページ数が増えていたら再設定し直し。

Sub RwHght()
Dim i As Single, j As Single
  ActiveSheet.PageSetup.PrintArea = Range("A1:H3").Address
    j = WorksheetFunction.RoundUp((Rows(1).RowHeight + _
          Rows(2).RowHeight + Rows(3).RowHeight) / 3, 1)
      If ActiveSheet.PageSetup.Pages.Count > 1 Then
        For i = j To 100 Step -0.1
             If ActiveSheet.PageSetup.Pages.Count = 1 Then
                Rows("1:3").RowHeight = i
                Exit Sub
             End If
          Next i
     End If
End Sub

このプロシージャは、"Private Sub Workbook_Open"で、自動起動させます。
行の高さを0.1刻みで減らしながら、印刷領域の三行に割り当てて設定します。

この印刷領域の設定が、印刷ページ数が1になったらプロシージャを抜けます。
これがサンプルプログラムなんだけれど、もう一つ、忘れたことがありました。

それは、シェイプは、既定値が”セルに合わせて移動やサイズ変更をする”設定。
これを、”セルに合わせて移動やサイズ変更をしない”ようにしないとズレるな。

Sub DntMveShps() 
 ActiveSheet.Shapes.SelectAll
 Selection.Placement = xlFreeFloating
End Sub

なので、これもブック立ち上げ時に、プロパーティ設定をするようにしました。
というわけで、VBAでコードを書けば、知らないことがたくさん出てきました。

シートを印刷用紙に見立てる時は印刷レイアウトで表示させて、どのようにタックシール上に印刷されるのか確認していますが、思った以上にシェイプがずれたりして、以上のどちらか効果的なのかは、これからチェックだなと思ったのでした。



いいねと思ったら、三つポチっとね!
にほんブログ村 スキースノボーブログへにほんブログ村 スキースノボーブログ スキーへにほんブログ村 旅行ブログ 旅日記・旅の思い出へ
にほんブログ村    にほんブログ村      にほんブログ村 



0 件のコメント:

コメントを投稿