Excel 每30分钟移动一次鼠标指针

Excel 每30分钟移动一次鼠标指针,excel,vba,Excel,Vba,我希望鼠标指针每30分钟自动移动一次。 我正在用Excel VBA编写代码。 我试过了,但没有成功。使用以下代码创建新模块: Private dtmNext As Date Private Type POINTAPI x As Long y As Long End Type Private Declare Function GetCursorPos Lib "user32" (Point As POINTAPI) As Long Private Declare Function

我希望鼠标指针每30分钟自动移动一次。
我正在用Excel VBA编写代码。

我试过了,但没有成功。

使用以下代码创建新模块:

Private dtmNext As Date
Private Type POINTAPI
    x As Long
    y As Long
End Type

Private Declare Function GetCursorPos Lib "user32" (Point As POINTAPI) As Long
Private Declare Function SetCursorPos Lib "user32" (ByVal x As Integer, ByVal y As Integer) As Long

Sub Move_Cursor()
    Dim Hold As POINTAPI
    GetCursorPos Hold
    SetCursorPos Hold.x + 30, Hold.y
    dtmNext = DateAdd("n", 30, Now)
    Application.OnTime dtmNext, "Move_Cursor"
End Sub

Sub Stop_Cursor()
    Application.OnTime dtmNext, "Move_Cursor", , False
End Sub
调用
Move\u Cursor()
开始每30分钟移动一次光标。要停止自动运动,请使用

Application.OnTime dtmNext, "Move_Cursor", , False

它确实可以工作,但您需要创建一个模块。右键单击此工作表-->插入-->模块


只有这样它才能工作。

谢谢你的第一个答案,我只是做了一些更新(
PtrSafe
声明)和更友好的名字

1-创建一个名为“鼠标”的模块

2-此代码:

Private Type mousePos
    x As Long
    y As Long
End Type
Private Declare PtrSafe Function GetCursorPos Lib "user32" (ByRef p As mousePos) As Long
Private Declare PtrSafe Function SetCursorPos Lib "user32" (ByVal x As Integer, ByVal y As Integer) As Long
Private Function mouseGet(ByRef p As mousePos) As Long: GetCursorPos p: End Function
Function mouseSet(x, y As Integer): SetCursorPos IIf(x < 0, 0, x), IIf(y < 0, 0, y): End Function
Function mouseOffset(Optional x As Integer = 0, Optional y As Integer = 0)
    Dim Hold As mousePos
    mouseGet Hold
    mouseSet Hold.x + x, Hold.y + y
End Function

IIf
IIf
的原因是一个负数会将鼠标设置到尖叫的另一侧

请参见“谢谢”。我已经对它进行了测试,但对我来说是无效的:/“编译错误:未定义用户定义类型”。什么不适合您?您是否在模块顶部插入了
私有dtmNext As Date
行?编译错误:未定义用户定义类型。错误显示在第一行“Hold As POINTAPI”“.I'm insert此代码:Private dtmNext As Date”每隔30秒移动光标Sub Move_cursor()Dim Hold As POINTAPI GetCursorPos Hold SetCursorPos Hold.X_Pos+30,Hold.Y_Pos”应用程序。Wait DateAdd(“s”,1,Now)SetCursorPos Hold.X_Pos,Hold.Y_Pos dtmNext=DateAdd(“s”,30,Now)Application.OnTime dtmNext,“Move_Cursor”End Sub“Stop Move Cursor Sub Stop_Cursor()Application.OnTime dtmNext,“Move_Cursor”,False End subtanks,但它仍然不起作用。关于代码,我还需要什么吗?现在我只有一张空白表,其中包含您的代码。VBA说”编译错误:您无法在对象模块“熟悉的东西”中定义公共的自定义类型。谢谢您的帮助,不幸的是它不起作用://G.Karlsson,请尝试将
Private
Public
修改器添加到类型定义中。使用Public和Private获取相同的错误消息“i get”子或函数尚未定义“@G.Karlsson,我已经声明了对外部过程的引用,现在
Move_Cursor()
函数可以工作。尝试使用答案中更新的代码段。谢谢,现在它几乎可以工作了!当我运行代码时,鼠标会移动,但当我检查它是否自动移动时,将在设置的时间显示错误消息。(我将其更改为在1分钟后移动以进行测试)。错误消息是:“您不能运行宏。”。宏可能在此工作簿中不可用,或者所有宏都已禁用。“因此,现在设置中可能有此功能。”。。
Sub mouseTest()
    Mouse.mouseSet 200, 200
          mouseSet 300, 300
    Mouse.mouseOffset 200    'y is optional
    Mouse.mouseOffset , 200  'x is optional
    Mouse.mouseOffset y:=200 'x is optional
          mouseOffset 200    'y is optional
          mouseOffset 200, 200
End Sub