Microsoft Access 掲示板

VBAでラインを引くと太さが変わったり切れたりする

9 コメント
views
4 フォロー

レポート印刷のときにVBAでレコードごとにラインを引こうと思い、以下のように記述しました

Private Sub 詳細_Print(Cancel As Integer, PrintCount As Integer)

    Dim Left As Single
    Dim Top As Single
    Dim Width As Single
    Dim Height As Single

    Me.ScaleMode = 1

    Left = Me.ScaleLeft
    Top = Me.Height
    Width = Left + Me.ScaleWidth
    Height = Top

    Me.ForeColor = RGB(0, 0, 0)
    Me.DrawWidth = 1

    Me.Line (Left, Top)-(Width, Height)

End Sub

するとそのラインにより太さが微妙に変わったり
ラインの左端の一部が切れたりします

どのように改良すればよいでしょうか?

TP
作成: 2020/08/29 (土) 16:33:24
通報 ...
1

その現象は発生するのは、画面上ですか、それとも実際に印刷したときですか。

とりあえず当てずっぽうですが、

   Left = Me.ScaleLeft + 10
   Top = Me.Height - 10

としたらどうですか。この数値を増減させてみて変化はありますか。

2

やってみましたがやはりおかしくなります
画像では視認しやすいように太さを7に設定しました
画像
画像のように行により若干太さも変わり左先端がまちまちの不揃いになってしまいます

右端は丸みを帯びた先端ですがやや不揃いです
画像

原因がわかりますでしょうか?
よろしくお願いいたします

3

ペイントで切り貼りしたところやはり線の太さも違うようです
画像
コードで書いたので同じラインが引かれるはずですが不思議です

このサイト様で、レコードがない部分にも枠線を書くというテクニックがありますが
あちらでは正常に表示されていましたでしょうか?
私ほど神経質に見る人もそんなにいないのか気にならないだけでしょうか?

4

「代替の背景色」を設定しているようですが、これを「色なし」に設定したらどうなりますか。

「代替の背景色」はたいてい「色なし」にしているのでそれで試していましたが、色を設定したら、太さが変わるという現象が発生しました。

5

「代替の背景色」を「代替の行」にした場合、いろいろ調整して下記のようにすると、太さの差はほとんど目立たなくなりました。

Private Sub 詳細_Print(Cancel As Integer, PrintCount As Integer)
    Dim Left As Single
    Dim Top As Single
    Dim Width As Single
    Dim Height As Single

    Me.ScaleMode = 1

    Left = -20
    Top = Me.Height - 8
    Width = Me.ScaleWidth + 20
    Height = Top

    Me.ForeColor = RGB(0, 0, 0)
    Me.DrawWidth = 7

    Me.Line (Left, Top)-(Width, Height)
End Sub

線の両端は丸くなるのは、線の左端と右端を、詳細セクションからはみ出るように設定することで解決できるようです。
また、高さは線の太さよりすこし大きめの数値を引くとよさそうです。

6

ありがとうございます
明日コードをためさせていただきます

それにしてもなぜ太さがかわるんですかね

Me.DrawWidth = 1
だと太さは変わらないかもしれませんね
それも踏まえて明日試してみます

7

確認しました
指示通りやったらきれいになりました
「代替の背景色」を「代替の行」などの兼ね合いで線が少し消えたりしていたのでしょうか?

後学のために教えていただきたいのですが

Left = -20
Width = Me.ScaleWidth + 20
はそれぞれ詳細から少しはみ出して線を書くためとわかりました

Top = Me.Height - 8
Height = Top
はなぜ高さから引くのですか?
足して高さより少し下からラインを引くのではないでしょうか?

8

セクションの高さの位置に描画すると、太い場合はセクションの範囲からはみ出るので、はみ出ないようにすこし上に移動させるという意味になると思います。

下記のようなイメージだと思ってます。
画像1

9

なるほど理解できました
ありがとうございます