テキストボックスの座標を取得する方法です。これによりテキストボックスのすぐ傍にフォームを表示することができます。移動はDoCmd.MoveSizeで取得した座標を指定します。
使い方は、
Me.テキスト0.SetFocus Dim lngX As Long, lngY As Long Call Get_Position(lngX, lngY) MsgBox "X=" & lngX & ":Y=" & lngY & ""
- RT:右上
- LT:左上
- RB:右下
- LB:左下
モジュール
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long Private Declare Function GetFocus Lib "user32" () As Long Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long Private Const INCH_TO_TWIP As Integer = 1440 '1インチあたりTWIP値 Private Const LOGPIXELSX As Long = 88 'X方向1論理インチあたりのピクセル値 Private Const LOGPIXELSY As Long = 90 'Y方向1論理インチあたりのピクセル値 Public Sub Get_Position(ByRef X As Variant, ByRef Y As Variant, Optional point As String = "RT") Dim WindowHandle As Long Dim DeviceContextHandle As Long Dim WindowRect As RECT WindowHandle = GetFocus() If WindowHandle = 0 Then X = 0 Y = 0 Exit Sub End If GetWindowRect WindowHandle, WindowRect DeviceContextHandle = GetDC(WindowHandle) Select Case point Case "LT" X = (WindowRect.Left / GetDeviceCaps(DeviceContextHandle, LOGPIXELSX)) * INCH_TO_TWIP Y = (WindowRect.top / GetDeviceCaps(DeviceContextHandle, LOGPIXELSY)) * INCH_TO_TWIP Case "RT" X = (WindowRect.right / GetDeviceCaps(DeviceContextHandle, LOGPIXELSX)) * INCH_TO_TWIP Y = (WindowRect.top / GetDeviceCaps(DeviceContextHandle, LOGPIXELSY)) * INCH_TO_TWIP Case "LB" X = (WindowRect.Left / GetDeviceCaps(DeviceContextHandle, LOGPIXELSX)) * INCH_TO_TWIP Y = (WindowRect.Bottom / GetDeviceCaps(DeviceContextHandle, LOGPIXELSY)) * INCH_TO_TWIP Case "RB" X = (WindowRect.right / GetDeviceCaps(DeviceContextHandle, LOGPIXELSX)) * INCH_TO_TWIP Y = (WindowRect.Bottom / GetDeviceCaps(DeviceContextHandle, LOGPIXELSY)) * INCH_TO_TWIP Case Else X = (WindowRect.right / GetDeviceCaps(DeviceContextHandle, LOGPIXELSX)) * INCH_TO_TWIP Y = (WindowRect.top / GetDeviceCaps(DeviceContextHandle, LOGPIXELSY)) * INCH_TO_TWIP End Select End Sub