这是我提出的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
答案 0 :(得分:1)
尝试在ItemAdd事件处理程序中设置断点,并在遇到断点时检出clntFldrItms
对象。
请注意,当同时添加多个项目时,不会触发ItemAdd
事件(超过16个 - 这是Outlook中众所周知的问题)。
您可能会发现Getting Started with VBA in Outlook 2010文章非常糟糕。
编辑设置clntFldrItms
是因为启动Outlook时会运行启动事件处理程序。因此,对象在场景后面的启动时初始化。