2011-03-28 74 views
1

我有一个名为UpdateMacro宏从更新我的数据库我的Excel创建在Excel宏其执行其他宏观每2秒

我想创建一个宏名为RepeatMacro它会自动执行UpdateMacro每2秒并且仅提供启动和停止按钮来启动和停止执行RepeatMacro

怎么办?

+1

您是否考虑过在必要时进行更新,而不是每2秒更新一次? [This](http://www.cpearson.com/excel/OnTime.aspx)可能有助于你目前的要求,虽然... – jswolf19 2011-03-28 06:57:59

+0

@ jswolf19:不,这是我的应用程序的neccesity每更新一次2-3秒。 – 2011-03-28 07:00:46

回答

2

谷歌为Application.OnTime

例如

Dim dtNextRunTime As Date 
dtNextRunTime = Now + TimeSerial(0,0,2) 
Application.OnTime dtNextRunTime, "MyProcedure", True 

要清除以前设置的过程,您需要保存调度的时间) dtNextRunTime以上),然后用:

Application.OnTime dtNextRunTime, "MyProcedure", False 

下面是一个示例VB模块方法StartSchedule/StopSchedule让你去:

Private m_dtScheduledTime As Date 
Private m_lDelaySeconds As Long 
Private m_bIsScheduled As Boolean 

Private Sub DoWork() 

    m_bIsScheduled = False 

    ' ... do your work 

    ' Reschedule at the same frequency once completed 
    StartSchedule m_lDelaySeconds, "DoWork" 

End Sub 

Public Sub StartSchedule(ByVal DelaySeconds As Long) 
    StopSchedule 
    m_lDelaySeconds = DelaySeconds 
    m_dtScheduledTime = Now + TimeSerial(0, 0, m_lDelaySeconds) 
    Application.OnTime m_dtScheduledTime, "DoWork", True 
    m_bIsScheduled = True 
End Sub 

Public Sub StopSchedule() 
    If m_bIsScheduled Then 
     Application.OnTime m_dtScheduledTime, "DoWork", False 
     m_bIsScheduled = False 
    End If 
End Sub 
+0

感谢您的输入。我检查了'Application.OnTime',并得到了一个印象,它是在指定的时间运行宏。但是我不需要在特定的时间运行宏。我想在整个24小时内每秒运行一次。所以我不能只指定时间。什么可以是其他选择? – 2011-03-28 06:58:51

+2

@PARTH,那么,在宏的末尾,你有2秒后设置一个新的计时器... – jswolf19 2011-03-28 07:11:53

+0

@ jswolf19:谢谢乔。是的,不要忘记@ jswolf19在做出这个答案时的贡献。感谢JsWolf19,你的链接帮助了很多。 :) :)感谢你们两个。有效..!! – 2011-03-28 11:04:09

0

这将运行UpdateMacro每两秒钟,假设UpdateMacro花费不到两运行几秒钟。

Sub RepeatMacro() 
    Dim lastRunTime 
    Do 
     lastRunTime = Now 
     Range("A1") = "Last run: " & Format(lastRunTime, "hh:nn:ss") 
     Call UpdateMacro 
     DoEvents 
     Application.Wait lastRunTime + TimeValue("00:00:02") 
    Loop 
End Sub 

Sub UpdateMacro() 
    Debug.Print "running UpdateMacro" 
End Sub 

编辑启动并从您的薄片停止RepeatMacro,使一个启动按钮和停止按钮,并把下面的代码你的表模块中。另外请注意,我在上面的RepeatMacro中添加了一个DoEvents

Private Sub StartButton_Click() 
    Call RepeatMacro 
End Sub 

Private Sub StopButton_Click() 
    MsgBox "Stopped." 
    End 
End Sub 

现在只是说End是不好的做法,但你明白了。

+0

@ Jean-Francois Corbett:谢谢你的回复。如何停止这个RepeatMacro? – 2011-03-28 08:35:25

+0

@PARTH:编辑我的答案来解决这个问题。 – 2011-03-28 09:57:38

+0

是的,我读过它。谢谢:)我会尽快尝试代码并回复你 – 2011-03-28 09:59:44