前些日子工作的需要,要在outlook里写VBA实现定时检查邮件然后报警这样的功能。搞了好段时间才搞定,其中遇到的一个问题就是outlook里不支持VBA中ontime等函数的使用,用等待等函数又使得outlook一直被VBA宏占用,不能正常收发邮件了。
最后我还是通过借助Windows API 函数SetTimer和KillTimer实现了我要完成的功能。
代码如下:
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
Const INTERVAL = 300000
Public lTimerID As Long
Sub StartTimer(lDuration As Long)
On Error GoTo SubEnd
If lTimerID = 0 Then
lTimerID = SetTimer(0&, 0&, lDuration, AddressOf Alert) 'Alert就是我要定时执行的函数的名,可以用你需要定时执行的函数替换
Else
Call StopTimer
lTimerID = SetTimer(0&, 0&, lDuration, AddressOf Alert)
End If
SubEnd:
End Sub
Sub StopTimer()
KillTimer 0&, lTimerID
End Sub
Private Sub Application_Quit()
Call StopTimer
End Sub
Private Sub Application_Startup() '当outlook打开时(首先宏安全性要允许执行宏)触发此事件
Call StartTimer(INTERVAL) 'INTERVAL的单位是毫秒,我设置的是每隔5分钟。此函数的功能是相隔INTERVAL毫秒函数自动再次被调用
End Sub
Windows API 函数SetTimer和KillTimer说明如下:
SetTimer:创建或设置一个定时器。
函数的原型
UINT_PTR SetTimer(
HWND hWnd, //窗口句柄
UINT_PTR nIDEvent, // 定时器ID,多个定时器时,可以通过该ID判断是哪个定时器
UINT nElapse, // 时间间隔,单位为毫秒
TIMERPROC lpTimerFunc //回调函数
);
KillTimer:移除定时器函数的声明:移除先前用SetTimer设置的定时器。在定时器使用完毕后移除定时器时使用。
函数原型:
BOOL KillTimer(
HWND hwnd; //与定时器相关联的窗口句柄
UINT nIDEvent //定时器标识符
):
参数:
hwnd:与定时器相关联的窗口句柄
nIDEvent: 传递给SetTimer的定时器ID值。
说明:
销毁以前调用SetTimer创建的用nIDEvent标识的定时器事件。不能将此定时器有关的未处理的WM_TIMER消息都从消息队列中清除。
返回值
BOOL 如果函数成功,返回一个非0值,
如果失败,返回值为0
注意: 该函数并不移除WM_TIMER 先前发送到消息列队中的消息
由于outlook的VBA是写的ThisOutlookSession里,所以没保存成附件发给大家,见谅了。
相关推荐
4. **后台处理**:执行一些耗时的操作时,可以设置计时器在后台执行,不影响用户对其他Office应用程序的使用。 5. **定时发送邮件**:通过Outlook的VBA接口,可以实现定时发送邮件的功能。 ### 注意事项 - 使用...
为了达到类似Outlook的平滑滚动,你需要自定义TScrollBox的OnScroll事件,通过计时器控制滚动速度,使滚动更加平滑自然。 4. **动态加载和隐藏Tab页**: - 如果选项卡数量过多,可以考虑只在需要时动态加载和显示...
文中提到的项目命名为"MyOutLookFace",在项目中引入的主要控件包括Panel、ImageList、ListView和计时器。其中: - **Panel**:作为功能区容器,设置其Dock属性为Left或Right,BorderStyle属性为Fixed3D,以模拟...
3. **实现计时器**:在事件处理程序中,启动一个计时器。如果在设定的时间内(例如250毫秒)再次触发单击事件,那么我们就认为这是双击。 ```csharp private DispatcherTimer timer = new DispatcherTimer(); timer...
"MeetingCost: 会议费用计算工具是一款创新的计时器应用,专为衡量会议经济效益而设计。这款工具采用直观的用户界面和先进的算法,帮助用户实时了解会议的时间消耗与潜在的金钱成本。通过精确追踪会议时间, ...
6. 定时关闭音乐:利用内置的计时器,选择“计时器结束时”的“iPod睡眠模式”,可以设置音乐定时停止,防止夜间持续播放。 7. 通讯录管理:将原有的联系人导入iPhone可能是个挑战,但可以通过同步服务如iCloud、...
应用提供了专注计时器,帮助用户保持集中注意力。 此外,"Life Balance"还具备以下特点: - 同步功能:支持跨设备同步,无论在电脑、手机还是平板上,都能随时查看和管理任务。 - 分享与协作:用户可以将任务分享...
这可以通过JavaScript实现,并与Bootstrap的计时器组件结合使用。 5. **表单设计**:邮件订阅通常涉及用户输入邮箱地址。Bootstrap的表单组件提供预设的样式,使表单字段和提交按钮看起来专业且一致。 6. **兼容性...
在上述脚本中,`WshShell.SendKeys`方法用于模拟键盘输入,而`Popup`方法用于显示带有计时器的弹出对话框。 总的来说,VBScript是自动化测试中的一个重要工具,尤其适合Windows环境下的脚本编写。掌握VBScript的...
这可以通过易语言中的计时器组件或者操作系统级别的计划任务API来实现,设置特定时间触发邮件发送操作。 5. **错误处理**:为了提高软件的健壮性,需要处理可能出现的各种异常情况,如网络中断、服务器拒绝连接等,...
6. **时间管理工具**:一些高级的桌面日历软件可能包含时间管理工具,如番茄工作法计时器,帮助用户提高专注力,合理分配工作和休息时间。 7. **多语言支持**:为了满足全球用户的需求,软件通常会提供多种语言选项...
实例111 使用Timer组件制作计时器 161 实例112 使用Timer组件显示当前系统时间 165 实例113 使用Timer组件制作左右飘动的窗体 166 实例114 使用Timer组件实现奥运倒计时 167 3.8 ServiceController组件 169 ...
实例111 使用Timer组件制作计时器 161 实例112 使用Timer组件显示当前系统时间 165 实例113 使用Timer组件制作左右飘动的窗体 166 实例114 使用Timer组件实现奥运倒计时 167 3.8 ServiceController组件 169 ...
实例111 使用Timer组件制作计时器 161 实例112 使用Timer组件显示当前系统时间 165 实例113 使用Timer组件制作左右飘动的窗体 166 实例114 使用Timer组件实现奥运倒计时 167 3.8 ServiceController组件 169 ...
实例111 使用Timer组件制作计时器 161 实例112 使用Timer组件显示当前系统时间 165 实例113 使用Timer组件制作左右飘动的窗体 166 实例114 使用Timer组件实现奥运倒计时 167 3.8 ServiceController组件 169 ...