2017-09-13 102 views
1

我有一个简单的代码,将复制我股票投资组合的当前值并将其粘贴到表中。我最近试图添加一个计时器,以便它每小时自动执行一次。它可以工作,但是它会将值粘贴到表格中四到五次。我周围搜索,我认为这可能是因为它只需一秒钟的时间来运行宏,所以它循环,直到一秒钟过去。Excel VBA OnTime宏运行多次

下面的代码:

Sub AutoPL() 
    Worksheets("Overview").Range("C15:D15").Copy 
    Worksheets("Data").Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).PasteSpecial      xlPasteValues 
    Application.CutCopyMode = False 
    Call PLTimer 
End Sub 


Sub PLTimer() 
    Application.OnTime Now + TimeValue("01:00:00"), "AutoPL" 
End Sub 

在此先感谢

+1

你可以添加公共intLastHrRun,intLastMinuteRun和intLastSecondRun,然后比较'时间'值,如果不同的小时,我认为你真的需要,然后运行,如果相同的小时,然后不。或者将'Now + TimeValue(“01:00:00”),'设置为var,然后在运行这段时间后取消运行时间,然后在PLTimer中重置。 –

+1

@Nathan_Sav最好是将Dim TimeLastRun设置为Double,因为与存储三个Integer并比较它们相比,这将非常精确。 –

+0

@mclapham如果问题确实代码运行速度太快,只需在调用“PLTimer”之前添加'Application.Wait(TimeValue(“00:01:00”))''。这将增加一个明确的等待时间,只需一分钟。 –

回答

0

@mclapham我解决了你在你的意见,通过使用Application.Wait Now + TimeValue("00:00:01")再次调用Application.OnTime之前描述的冻结。