2

矢印キーを使用してセルからセルに移動するときに、選択したセルの中心にマウス ポインターを移動しようとしています。

Excel 2010 では、次のソリューションは完全に機能します

Public Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

SetCursorPos _
    ActiveWindow.ActivePane.PointsToScreenPixelsX(Target.Left + (Target.Width / 2)), _
    ActiveWindow.ActivePane.PointsToScreenPixelsY(Target.Top + (Target.Height / 2))

End Sub

ただし、Excel 2003にはandメソッドActiveWindow.ActivePaneがありません。そこで、以下のような別の解決策を見つけようとしました。X 軸は正常に機能しますが、Y 軸は機能しません。PointsToScreenPixelsXPointsToScreenPixelsY

Public Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

SetCursorPos _
    ActiveWindow.Application.ActiveWindow.PointsToScreenPixelsX((Target.Left + (Target.Width / 2)) / 0.75), _
    ActiveWindow.Application.ActiveWindow.PointsToScreenPixelsY((Target.Top + (Target.Height / 2)) / 0.75)

End Sub

解像度などに関係なくこれが機能することを望みます。何かアイデアはありますか?

4

1 に答える 1

2

これは、古いバージョンの Excel で機能するはずです。それは不格好ですが、それは仕事を成し遂げます。

Declare Function SetCursorPos Lib "user32" _
   (ByVal x As Long, ByVal y As Long) As Long
Declare Function GetDC Lib "user32" ( _
  ByVal hwnd As Long) As Long
Declare Function ReleaseDC Lib "user32" ( _
  ByVal hwnd As Long, ByVal hDC As Long) As Long
Declare Function GetDeviceCaps Lib "gdi32" ( _
  ByVal hDC As Long, ByVal nIndex As Long) As Long

Sub MoveMouseToRange(R As Range)
Static lDPI&(1), lDC&

If lDPI(0) = 0 Then
    lDC = GetDC(0)
    lDPI(0) = GetDeviceCaps(lDC, 88&)    'this is the horizontal 
                                         'resolution of the user's screen,
                                         'in DPI
    lDPI(1) = GetDeviceCaps(lDC, 90&)    'vertical
    lDC = ReleaseDC(0, lDC)
End If

Zoom = R.Parent.Parent.Windows(1).Zoom
x = (R.Left + 0.5 * R.Width) * Zoom / 100 / 72 * lDPI(0)
y = (R.Top + 0.5 * R.Height) * Zoom / 100 / 72 * lDPI(1)
SetCursorPos x, y

End Sub
于 2015-11-28T23:31:08.137 に答える