| レポート:均等割付による印刷(縦書き) |
|
対象バージョン : 97, 2000, 2002, 2003
最終更新日 : 2005/04/25
(オリジナル作成日:1998/02/27)
概 要
レポートで縦書きで均等割付による印字を行う方法です。

解 説
プロパティ等の設定では実現ができないので、Report オブジェクトの Print メソッドを利用した汎用 Sub プロシージャです。
構 文
Call KintoWariV(Obj, Value, x, y, Height [,FontName] [,FontSize])
| 引 数 | 内 容 |
|---|---|
| obj | 表示する Report オブジェクトを指定します。 |
| Value | 表示する文字列式を指定します。 |
| x | 表示する "Left/左位置" を示す数式を指定します。 単位は cm で、小数の使用が可能です。 |
| y | 表示する "Top/上位置" を示す数式を指定します。 単位は cm で、小数の使用が可能です。 |
| Height | 表示する幅を "Height/高さ" を示す数式を指定します。 単位は cm で、小数の使用が可能です。 |
| FontName | フォント名を示す文字列式を指定します。 |
| FontSize | フォントサイズを示す数式を指定します。 |
FontName と FontSize は省略可能です。それぞれを省略した場合、Print
メソッドでの省略時値が使用されます。
FontName を省略し、FontSize を指定する場合は、カンマが必要です。
Sub プロシージャ
Public Sub KintoWariV(argrpt As Report, argValue As Variant, _
argX As Single, argY As Single, ArgHeight As Single, _
Optional ArgFontName As Variant, Optional ArgFontSize As Variant)
Dim sngX As Single
Dim sngY As Single
Dim sngValueHeight As Single
Dim sngHeightLimit As Single
Dim sngChrHeight As Single
Dim sngPrinted As Single
Dim intChrPos As Integer
Dim stChr As String
Dim sngGap As Single
If IsNull(argValue) Or argValue = "" Then Exit Sub
If Not IsMissing(ArgFontName) Then
argrpt.FontName = ArgFontName
End If
If Not IsMissing(ArgFontSize) Then
argrpt.FontSize = ArgFontSize
End If
' Twip へ変換
sngX = argX * 567
sngY = argY * 567
sngHeightLimit = ArgHeight * 567
sngValueHeight = argrpt.TextHeight(argValue) * Len(argValue)
' 印字指示高より印刷文字列の方が長い場合、印字可能文字まで印刷
If sngValueHeight > sngHeightLimit Then
For intChrPos = 1 To Len(argValue)
stChr = Mid(argValue, intChrPos, 1)
sngChrHeight = argrpt.TextHeight(stChr)
If sngPrinted + sngChrHeight > sngHeightLimit Then Exit For
argrpt.CurrentX = sngX
argrpt.CurrentY = sngY
argrpt.Print stChr;
sngY = sngY + sngChrHeight
sngPrinted = sngPrinted + sngChrHeight
Next
Exit Sub
End If
' 文字間隔計算
If Len(argValue) > 1 Then
sngGap = (sngHeightLimit - sngValueHeight) / (Len(argValue) - 1)
End If
For intChrPos = 1 To Len(argValue)
stChr = Mid(argValue, intChrPos, 1)
argrpt.CurrentX = sngX
argrpt.CurrentY = sngY
argrpt.Print stChr
sngY = sngY + argrpt.TextHeight(stChr) + sngGap
Next
End Sub
使用例
レポートの詳細セクションの "OnFormat/フォーマット時" のイベントプロシージャで、次のように設定します。
Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) Call KintoWariV(Me, Me![名前], 1.5, 0.5, 3 ,"明朝",9 ) End Sub
補 足
改訂履歴