ExcelVBA技
全般
E13M012
E13M012 (Excel2000~2013)
図形描画の長さ単位にcm及びピクセルを用いる
VBAでは図形描画の長さ単位はポイント(pt)が用いられています。
従って、他の単位で設定するには、ポイント単位に変換する必要があります。
長さをcm単位で指定する場合の変換には Application.CentimetersToPoints メソッド が用意されています。
また、長さをピクセル(px)単位で設定する関数を併せて示します
'標準モジュール Option Explicit Option Private Module Const LOGPIXELSX = 88 Const LOGPIXELSY = 90 #If VBA7 And Win64 Then Private Declare PtrSafe Function GetDeviceCaps Lib "gdi32" _ (ByVal hDc As LongPtr, ByVal nIndex As Long) As Long Private Declare PtrSafe Function GetDC Lib "user32" (ByVal hWnd As LongPtr) As LongPtr Private Declare PtrSafe Function ReleaseDC Lib "user32" _ (ByVal hWnd As LongPtr, ByVal hDc As LongPtr) As Long #Else Private Declare Function GetDeviceCaps Lib "gdi32" _ (ByVal hDc As Long, ByVal nIndex As Long) As Long Private Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long Private Declare Sub ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hDc As Long) #End If 'kpx2pt関数 'ピクセル単位の数値をポイント単位に変換 'px :変換の対象となるピクセル単位の数値 '戻り値:ポイント単位の数値 Function kpx2pt(px As Long, Optional vertical As Boolean) As Double Dim hDc Static xx#, yy# If xx = 0 Then hDc = GetDC(0) xx = 72 / GetDeviceCaps(hDc, LOGPIXELSX) 'xDPI yy = 72 / GetDeviceCaps(hDc, LOGPIXELSY) 'yDPI ReleaseDC Application.hWnd, hDc End If kpx2pt = IIf(vertical, px * yy, px * xx) '0.6' 0.75 End Function 'kcm2pt関数 'センチメートル単位の数値をポイント単位に変換 'cm :変換の対象となるセンチメートル単位の数値 '戻り値:ポイント単位の数値 Function kcm2pt(cm As Double) As Double kcm2pt = Application.CentimetersToPoints(cm) End Function 'kpx2pt関数の使用例 'アクティブの図形を幅をピクセル単位で設定する Sub example_kpx2pt() If VarType(Selection) <> vbObject Then Exit Sub With Selection.ShapeRange .Width = kpx2pt(150) '幅を150pxに .Height = kpx2pt(150, True) '高さを150pxに End With End Sub 'kcm2pt関数の使用例 'アクティブの図形を幅をcm単位で設定する 図形を選択して実行 Sub example_kcm2pt() If VarType(Selection) <> vbObject Then Exit Sub '図形ではない With Selection.ShapeRange .Width = kcm2pt(5.5) '幅を5.5cmに .Height = kcm2pt(5.5) '高さを5.5cmに End With End Sub