【问题标题】:Outlook VBA - Run a code every half an hour with outlook 2010 64 bitsOutlook VBA - 使用 Outlook 2010 64 位每半小时运行一次代码
【发布时间】:2014-05-19 11:42:19
【问题描述】:

这个问题之前已经完成(并已解决),请参阅Outlook VBA - Run a code every half an hour 几年前,我在几台运行 Vista(32 位)、Windows 7 和 Windows 8.1(均为 64 位)的计算机上使用了该代码,没有遇到任何问题。安装了新的 Office 2010 的新计算机会出现一些问题。

64 位版本的 Outlook 似乎与 32 位版本的反应不同。 我收到这些行的错误

Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerfunc As Long) As Long
Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long

这可以通过 PtrSafe 来纠正,例如:

Declare Function PtrSafe SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerfunc As Long) As Long
Declare Function PtrSafe KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long

该行出现另一个错误:

TimerID = SetTimer(0, 0, nMinutes, AddressOf TriggerTimer)

类型似乎不同。

【问题讨论】:

  • 嗯.. AddressOf ?如果您告诉我们错误消息和代码会有所帮助

标签: vba timer outlook outlook-2010


【解决方案1】:

PtrSafe 没有更正代码,它只是说明可以从 64 位代码调用以下声明。

AddressOf返回的指针原型为ByVal lpTimerfunc As Long,为32位;即太小而无法容纳 64 位地址。 hwnd也是如此。

使用LongPtr 类型来处理这个问题。

【讨论】:

    猜你喜欢
    • 2012-08-28
    • 2012-03-18
    • 1970-01-01
    • 2018-09-23
    • 1970-01-01
    • 2019-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多