You can make a Windows API (application programming interface) call to a Microsoft Windows DLL (dynamic-link Library) to get and set the current cursor position. The current position can be obtained by using the GetCursorPos function in USER32.DLL.

More Information

Microsoft Excel does not have the built-in functionality to get or set the cursor position. However, you can use the Declare statement in a Microsoft Excel Visual Basic for Applications macro to call a Microsoft Windows function to access the current position. You can also use another function SetCursorPos to set the cursor position. The SetCursorPos function can be used in a looping structure to move the cursor across the screen.

Microsoft provides examples of Visual Basic for Applications procedures for illustration only, without warranty either expressed or implied, including, but not limited to the implied warranties of merchantability and/or fitness for a particular purpose. The Visual Basic procedures in this article are provided 'as is' and Microsoft does not guarantee that they can be used in all situations. While Microsoft support professionals can help explain the functionality of a particular macro, they will not modify these examples to provide added functionality, nor will they help you construct macros to meet your specific needs. If you have limited programming experience, you may want to consult one of the Microsoft Solution Providers. Solution Providers offer a wide range of fee-based services, including creating custom macros. For more information about Microsoft Solution Providers, call Microsoft Customer Information Service at (800) 426-9400.


  1. Type the following code into a new module:

    ' Access the GetCursorPos function in user32.dll
    Declare Function GetCursorPos Lib "user32" _
    (lpPoint As POINTAPI) As Long
    ' Access the GetCursorPos function in user32.dll
    Declare Function SetCursorPos Lib "user32" _
    (ByVal x As Long, ByVal y As Long) As Long

    ' GetCursorPos requires a variable declared as a custom data type
    ' that will hold two integers, one for x value and one for y value
    X_Pos As Long
    Y_Pos As Long
    End Type

    ' Main routine to dimension variables, retrieve cursor position,
    ' and display coordinates
    Sub Get_Cursor_Pos()

    ' Dimension the variable that will hold the x and y cursor positions
    Dim Hold As POINTAPI

    ' Place the cursor positions in variable Hold
    GetCursorPos Hold

    ' Display the cursor position coordinates
    MsgBox "X Position is : " & Hold.X_Pos & Chr(10) & _
    "Y Position is : " & Hold.Y_Pos
    End Sub

    ' Routine to set cursor position
    Sub Set_Cursor_Pos()

    ' Looping routine that positions the cursor
    For x = 1 To 480 Step 20
    SetCursorPos x, x
    For y = 1 To 40000: Next
    Next x
    End Sub
  2. Click anywhere inside the text of the Get_Cursor_Pos routine and press the F5 key to run the Get_Cursor_Pos macro.

    You will get a message box displayed with the coordinates of the current position of the mouse pointer.

  3. Click anywhere inside the text of the Set_Cursor_Pos routine and press the F5 key to run the Set_Cursor_Pos macro.

The cursor will move diagonally down across the screen.

Need more help?

Expand your skills
Explore Training
Get new features first
Join Microsoft Insiders

Was this information helpful?

What affected your experience?

Thank you for your feedback!