子完成后,Application_Startup变量消失

时间:2017-01-09 20:20:49

标签: vba outlook

这是我提出的previous question的后续跟进。感谢社区对您的帮助。

我正在尝试首次创建WithEvents代码来检查新项目的文件夹。最终的计划是使用ItemsAdd事件来触发一堆其他处理,但是现在,只是尝试将它保存到文件夹而不是那么远。

当我在下面运行Application_Startup代码时,立即窗口显示我找到了正确的clntFldrItms。问题是,如果我然后将项目拖到有问题的文件夹中,则ItemAdd宏不会触发。当我尝试为clntFldrItms添加监视时,该变量未设置为任何内容。看起来,只要Application_Startup子程序完成,分配就会停止。

所有代码都在ThisOutlookSession对象中。

这可能是因为我正在使用SMTP电子邮件地址(例如,而不是Exchange)吗?

再次感谢您的帮助。

编辑添加我对Eugene评论的回复。我注意到,当我打开编辑器并进入Application_Startup子程序时,clntFldrItms被正确分配,甚至在我到达set clntFldrItms = clntFldr.Items行之前。我一踏完,就会再次消失。我无法进入ItemAdd子,但当我进入其他代码时,clntFldrItms是Nothing。

最终编辑抱歉,我意识到我忘了关闭此功能。我本身无法解决问题,但我意识到这是由于我的SMTP帐户。当我在使用Exchange时尝试它时,它起作用了。除非我在Exchange工作,否则事件似乎不会触发。

$Hive = [Microsoft.Win32.RegistryHive]::LocalMachine
$AppAddressMain = "software\Microsoft\Windows\CurrentVersion\Uninstall\"
$AppAddressWOW = "software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\"

Function Get-InstalledApps
{
    param ($MainHive,
        $Computer,
        [string[]]$RegAddress)

    Foreach ($Address in $RegAddress)
    {
        $RegBaseKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($MainHive, $computer)
        $RegSubKey = $RegBaseKey.OpenSubKey($Address)
        $output = @()
        foreach ($Subkey in $RegSubKey.GetSubKeyNames())
        {
            $AppAddress = $Address + $Subkey
            $DisplayName = $($RegBaseKey.OpenSubKey($AppAddress)).GetValue("DisplayName")
            $DisplayVersion = $($RegBaseKey.OpenSubKey($AppAddress)).GetValue("DisplayVersion")
            $output += [PSCustomObject]@{ DisplayName = $DisplayName; DisplayVersion = $DisplayVersion }
        }
    }
    return $output
}

Get-InstalledApps -MainHive $Hive -Computer "MyPC" -RegAddress $AppAddressMain | sort DisplayName

1 个答案:

答案 0 :(得分:1)

尝试在ItemAdd事件处理程序中设置断点,并在遇到断点时检出clntFldrItms对象。

请注意,当同时添加多个项目时,不会触发ItemAdd事件(超过16个 - 这是Outlook中众所周知的问题)。

您可能会发现Getting Started with VBA in Outlook 2010文章非常糟糕。

编辑设置clntFldrItms是因为启动Outlook时会运行启动事件处理程序。因此,对象在场景后面的启动时初始化。