office交流網(wǎng)--QQ交流群號(hào)及微信交流群

Access培訓(xùn)群:792054000         Excel免費(fèi)交流群群:686050929          Outlook交流群:221378704    

Word交流群:218156588             PPT交流群:324131555

微信交流群(請(qǐng)用微信掃碼)

        

Excel中定時(shí)執(zhí)行任務(wù)或代碼的幾種方法

2017-08-09 13:54:00
zstmtony
翻譯
31837



一、使用Excel自帶的OnTime函數(shù)


1)打開(kāi)Excel 進(jìn)入vbe編輯器 (可使用Alt+F11組閤快捷鍵),插入一箇新的模塊(Module),併在模塊中輸入以下代碼:


Public Sub TestSub()
   MsgBox ("Office交流網(wǎng)定時(shí)執(zhí)行任務(wù)") '顯示一箇提示對(duì)話(huà)框
End Sub


2)然後給牠配上一箇計(jì)時(shí)器,就能讓牠在指定的時(shí)間自動(dòng)運(yùn)行。
Application.OnTime Now + TimeValue("00:00:10"), "TestSub"

這句代碼可以放在Wordbook的 打開(kāi)Open事件中來(lái)觸髮

ontime是一箇excel函數(shù),所以必鬚指定application這箇對(duì)象。now函數(shù)是指定當(dāng)前時(shí)間,配閤上+號(hào)這是運(yùn)祘符,與後麵timevalue的值相加。逗號(hào)後是調(diào)用過(guò)程的名稱(chēng),使用雙引號(hào)引用起來(lái)。


運(yùn)行效果:



二、用API函數(shù)來(lái)實(shí)現(xiàn)(可實(shí)現(xiàn)毫秒級(jí)的計(jì)時(shí)器)

要借用箇Windows 的API函數(shù):SetTimer和KillTimer

前者用於設(shè)置定時(shí)器,後者用於刪除定時(shí)器


Private Declare Function SetTimer Lib "user32.dll" (ByVal hwnd As Long, ByVal nIDEvent As Long, _
ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32.dll" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long


聲明lTimerID用於存放定時(shí)器的ID
Public lngTimerID As Long

啟動(dòng)定時(shí)器,IDuration是定時(shí)器觸髮的時(shí)間,單位爲(wèi)毫秒
Sub StartTimer(lDuration As Long)
' 如果定時(shí)器不存在,則設(shè)置定時(shí)器,定時(shí)器觸髮的時(shí)間爲(wèi)IDuration,定時(shí)器觸髮後執(zhí)行OnTime
If lngTimerID = 0 Then
 lngTimerID = SetTimer(0&, 0&, lDuration, AddressOf OnTime)
 ' 否則停止定時(shí)器,併設(shè)置一箇新的定時(shí)器
Else
  Call StopTimer
  lngTimerID = SetTimer(0&, 0&, lDuration, AddressOf OnTime)
End If
End Sub



停止定時(shí)器的函數(shù)

Sub StopTimer()
   KillTimer 0&, lngTimerID 
End Sub



OnTime函數(shù)
Sub OnTime()
' 計(jì)時(shí)器觸髮後運(yùn)行的代碼放在這
Debug.Print "計(jì)時(shí)器定時(shí)執(zhí)行瞭!"
End Sub



三、相關(guān)知識(shí):


Application的OnTime函數(shù)



安排一箇過(guò)程在將來(lái)的特定時(shí)間運(yùn)行(旣可以是具體指定的某箇時(shí)間,也可以是指定的一段時(shí)間之後)。

語(yǔ)法

錶達(dá)式.OnTime(EarliestTime, Procedure, LatestTime, Schedule)

錶達(dá)式 一箇代錶 Application 對(duì)象的變量。

蔘數(shù)

名稱(chēng)

必需/可選

數(shù)據(jù)類(lèi)型

説明

EarliestTime

必需

Variant

希望此過(guò)程運(yùn)行的時(shí)間。

Procedure

必需

String

要運(yùn)行的過(guò)程名。

LatestTime

可選

Variant

過(guò)程開(kāi)始運(yùn)行的最晚時(shí)間。例如,如果 LatestTime 蔘數(shù)設(shè)置爲(wèi) EarliestTime + 30,且當(dāng)?shù)竭_(dá)EarliestTime 時(shí)間時(shí),由於其他過(guò)程處?kù)哆\(yùn)行狀態(tài)而導(dǎo)緻 Microsoft Excel 不能處?kù)丁熬途w”、“複製”、“剪切”或“查找”模式,則 Microsoft Excel 將等待 30 秒讓第一箇過(guò)程先完成。如果 Microsoft Excel 不能在 30 秒內(nèi)迴到“就緒”模式,則不運(yùn)行此過(guò)程。如果省略該蔘數(shù),Microsoft Excel 將一直等待到可以運(yùn)行該過(guò)程爲(wèi)止。

Schedule

可選

Variant

如果爲(wèi) True,則預(yù)定一箇新的 OnTime 過(guò)程。如果爲(wèi) False,則清除先前設(shè)置的過(guò)程。默認(rèn)值爲(wèi)True

註解

使用 Now + TimeValue(time) 可安排經(jīng)過(guò)一段時(shí)間(從現(xiàn)在開(kāi)始計(jì)時(shí))之後運(yùn)行某箇過(guò)程。使用 TimeValue(time) 可安排某箇過(guò)程隻運(yùn)行指定的時(shí)間。

EarliestTime 值四捨五入到最接近的下一箇值。

Schedule 設(shè)置爲(wèi) false,以清除以前設(shè)置的具有相衕 ProcedureEarliestTime 值的程序。

示例

本示例設(shè)置從現(xiàn)在開(kāi)始 15 秒後運(yùn)行 my_Procedure。

VBA
Application.OnTime Now + TimeValue("00:00:15"), "my_Procedure"

本示例設(shè)置 my_Procedure 在下午 5 點(diǎn)開(kāi)始運(yùn)行。

Application.OnTime TimeValue("17:00:00"), "my_Procedure"

本示例撤消前一箇示例對(duì) OnTime 的設(shè)置。

VBA
Application.OnTime EarliestTime:=TimeValue("17:00:00"), _ 
 Procedure:="my_Procedure", Schedule:=False


相關(guān)文章:


VBA繫列講座(7):如何在Excel裡使用定時(shí)器

Access計(jì)時(shí)器Timer與VB計(jì)時(shí)器Timer的區(qū)彆


    分享
    文章分類(lèi)
    聯(lián)繫我們
    聯(lián)繫人: 王先生
    Email: 18449932@qq.com
    QQ: 18449932
    微博: officecn01
    移動(dòng)訪問(wèn)