如何在 Excel 2016 VBA 中使用 OnTime 事件和按鍵事件

您可以在 Excel 2016 的 VBA 編程中使用兩種與對象無關的事件:時間和按鍵。由於時間和按鍵與特定對象(例如工作簿或工作表)無關,因此您可以在普通 VBA 模塊中對這些事件進行編程。

OnTime 事件

OnTime 事件發生在一天中的特定時間。以下示例演示瞭如何在下午 3 點事件發生時讓 Excel 執行過程。在這種情況下,機器人的聲音告訴你醒來,並伴隨著一個消息框:

子設置警報()
  Application.OnTime 0.625,“顯示警報”
結束子
子顯示報警()
  Application.Speech.Speak(“嘿,醒醒”)
  MsgBox “下午休息時間到了!”
結束子

在此示例中,使用了 Application 對象的 OnTime 方法。此方法有兩個參數:時間(0.625 或下午 3:00)和時間事件發生時要執行的 Sub 過程的名稱 (DisplayAlarm)。

如果您忙於工作以至於忘記了會議和約會,則此過程非常有用。只需設置一個 OnTime 事件來提醒自己。

大多數人發現很難根據 Excel 編號系統來考慮時間。因此,您可能希望使用 VBA TimeValue 函數來表示時間。TimeValue 將看起來像時間的字符串轉換為 Excel 可以處理的值。以下語句顯示了一種更簡單的方法來為下午 3 點安排事件:

Application.OnTime TimeValue(“3:00:00 pm”), “DisplayAlarm”

如果要相對於當前時間(例如,從現在起 20 分鐘後)安排事件,可以使用如下語句:

Application.OnTime Now + TimeValue(“00:20:00”), “DisplayAlarm”

您還可以使用 OnTime 方法在特定日期運行 VBA 過程。您必須確保您的計算機繼續運行並且包含該過程的工作簿保持打開狀態。以下語句在 2016 年 12 月 31 日下午 5 點運行 DisplayAlarm 程序:

Application.OnTime DateValue(“12/31/2016 5:00 pm”), “DisplayAlarm”

這個特殊的代碼行可能會派上用場,警告您需要回家為新年前夜慶祝活動做好準備。

這是使用 OnTime 事件的另一個示例。執行 UpdateClock 過程將時間寫入單元格 A1,並在五秒後編程另一個事件。此事件重新運行 UpdateClock 過程。最終效果是單元格 A1 每五秒更新一次當前時間。要停止事件,請執行 StopClock 過程(取消事件)。請注意,NextTick 是一個模塊級變量,用於存儲下一個事件的時間。

Dim NextTick As Date
子更新時鐘()
' 用當前時間更新單元格 A1
  ThisWorkbook.Sheets(1).Range(“A1”) = 時間
' 從現在起 5 秒後設置下一個事件
  NextTick = Now + TimeValue(“00:00:05”)
  Application.OnTime NextTick, “UpdateClock”
結束子
子停止時鐘()
' 取消 OnTime 事件(停止時鐘)
  出錯時繼續下一步
  Application.OnTime NextTick, “UpdateClock”, , False
結束子

即使在工作簿關閉後 OnTime 事件仍然存在。換句話說,如果您在不運行 StopClock 過程的情況下關閉工作簿,則工作簿將在五秒鐘內重新打開(假設 Excel 仍在運行)。為防止出現這種情況,請使用包含以下語句的 Workbook_BeforeClose 事件過程:

呼叫停止時鐘

OnTime 方法有兩個額外的參數。如果您打算使用此方法,您應該參考幫助系統以獲取完整的詳細信息。

如果您想查看一個相當複雜的應用程序,請查看這個模擬時鐘應用程序。鐘面實際上是一個圖表,圖表每秒更新一次以顯示一天中的時間。沒用,但很有趣。

如何在 Excel 2016 VBA 中使用 OnTime 事件和按鍵事件

一個模擬時鐘應用程序。

按鍵事件

在您工作時,Excel 會持續監控您鍵入的內容。因此,您可以進行設置,以便按鍵或組合鍵執行過程。

下面是一個重新分配 PgDn 和 PgUp 鍵的示例:

子 Setup_OnKey()
  Application.OnKey “{PgDn}”、“PgDn_Sub”
  Application.OnKey “{PgUp}”、“PgUp_Sub”
結束子
子 PgDn_Sub()
  出錯時繼續下一步
  ActiveCell.Offset(1, 0).Activate
結束子
子 PgUp_Sub()
  出錯時繼續下一步
  ActiveCell.Offset(-1, 0).Activate
結束子

通過執行 Setup_OnKey 過程設置 OnKey 事件後,按 PgDn 會將您向下移動一行。按 PgUp 將您向上移動一行。

請注意,關鍵代碼括在大括號中,而不是括號中。有關鍵盤代碼的完整列表,請查閱幫助系統。搜索OnKey。

在此示例中, On Error Resume Next 用於忽略生成的任何錯誤。例如,如果活動單元格位於第一行,則嘗試向上移動一行會導致可以安全忽略的錯誤。如果圖表工作表處於活動狀態,則沒有活動單元格。

通過執行以下例程,您可以取消 OnKey 事件:

子 Cancel_OnKey()
  Application.OnKey “{PgDn}”
  Application.OnKey “{PgUp}”
結束子

使用空字符串作為 OnKey 方法的第二個參數不會取消 OnKey 事件。相反,它會導致 Excel 簡單地忽略擊鍵。例如,以下語句告訴 Excel 忽略 Alt+F4。百分號代表 Alt 鍵:

  Application.OnKey “%{F4}”, “”

儘管您可以使用 OnKey 方法為執行宏指定快捷鍵,但您應該使用“宏選項”對話框來執行此任務。

如果關閉包含代碼的工作簿並讓 Excel 保持打開狀態,則不會重置 OnKey 方法。因此,按快捷鍵將使 Excel 自動打開帶有宏的文件。為了防止這種情況發生,您應該在 Workbook_BeforeClose 事件代碼中包含代碼以重置 OnKey 事件。

Leave a Comment

HTKK 5.0.3

HTKK 5.0.3

HTKK 是稅務總局免費發布的報稅支援軟體,提供企業快速建立報稅表。了解HTKK的安裝步驟與升級功能。

有用的 Microsoft Power Query 日期函數

有用的 Microsoft Power Query 日期函數

探索 Excel 中的 Microsoft Power Query 日期函數,快速處理日期計算和操作,其中包含添加天數、提取日期部分等功能的詳細說明。

如何在 Excel 2019 中使用 3D 地圖功能

如何在 Excel 2019 中使用 3D 地圖功能

3D 地圖是 Excel 2019 中提供的令人興奮的可視化分析功能,讓你能夠在 Excel 中創建動態的 3D 地圖。探索如何利用這項技術提升數據分析的效果。

如何在 Excel 中使用 SKEW 和 SKEW.P 函數

如何在 Excel 中使用 SKEW 和 SKEW.P 函數

了解如何在 Excel 中使用 SKEW 和 SKEW.P 函數來衡量數據分佈的偏度,這對於分析數據的對稱性至關重要。

如何為 Excel 儀表板創建時間線切片器

如何為 Excel 儀表板創建時間線切片器

時間軸切片器的工作方式與標準切片器的工作方式相同,因為它允許您使用視覺選擇機製過濾數據透視表。了解如何在 Excel 中使用時間軸切片器來高效管理日期字段。

如何在 Excel 2016 中使用 XLOOKUP 函數

如何在 Excel 2016 中使用 XLOOKUP 函數

了解如何在 Excel 2016 中使用 XLOOKUP 函數,這是一個 VLOOKUP 函數的優秀替代品,具有更強大和靈活的功能!

智能表9.1.1

智能表9.1.1

Smartsheet 是一個動態工作平台,可讓您管理專案、建立工作流程以及與團隊合作。

共享點

共享點

SharePoint 是一個基於 Web 的協作系統,它使用各種工作流程應用程式、「清單」資料庫和其他 Web 元件以及安全功能來控制業務群組的協同工作。

萬年曆1.0.38/1.0.36

萬年曆1.0.38/1.0.36

萬年日曆是一款手機上的日曆檢視應用程式,可協助您在手機上快速查看陰陽日期,從而安排您的重要工作。

微軟 Outlook 2021

微軟 Outlook 2021

Microsoft Outlook 是由 Microsoft Corporation 開發的商業和生產力應用程式。