excel 2013 vba与其他办公室程序冲突

我们的公司在6个月前升级到了2013年。 我有预先存在的代码,导入CSV文件,执行计算,并更新graphics。 自2013年升级以来,运行Excel VBA代码时,其他Office 2013程序(例如Word,Outlook)将无法响应鼠标或键盘input,直到VBA代码完成。 有趣的是,PowerPoint不会出现影响。 在我的VBA代码中,我使用了典型的加速技术:application.windowstate = xlMinimized,使用手动计算,closures屏幕更新。 我遇到了堆栈溢出( Application.Screenupdating = false影响所有办公室 )的页面,表明屏幕更新设置为false是一个潜在的问题。 我试着按照这个链接和其他许多人的build议来修改我的代码,这样Word和Outlook在macros运行时仍然可以正常工作。 这包括使用“Excel”。 前缀(例如,Excel.Application.ScreenUpdating = False),使窗口最大化,使用“Excel.Application.Windows(ThisWorkbook.Name).WindowState = xlMinimized,等等。我已经试过的东西已经消除了Excel VBA的影响其他Office应用程序,我不能从根本上理解为什么办公室(显然)交织在一起,一个应用程序可能会对其他应用程序产生不利影响,在Office 2010或早期版本中我没有看到这种效果。

经过相当多的debugging,我终于明白了为什么我的VBA代码在Word / Outlook中抑制了响应。 我从来没有使用Office剪贴板,但出于某种原因,我在Excel中使用Word打开它,并看到有复制数据的证据,包括图表。 虽然我以前已经清理了代码,试图消除复制/粘贴(即使用剪贴板),但还是有两个方面尚未完成。 二者中较难改变的是图表更新领域。 懒惰,我已经开发了图表更新的代码,它总是要求在embedded图表所在的页面上至less有一个预先存在的图表。 我曾经使用的技术是复制顶部图表,删除页面上的所有图表,将复制的图表粘贴到顶部位置,然后复制所有图表位置。 然后代码运行,重新映射来自工作表的所有要绘制的数据的源数据。 我修改了代码,删除第一个图表,然后重复。 这避免了使用.Copy。 一旦我清理了剪贴板的所有用途,我就能够在Excel中运行VBA代码,而不会干扰Word或Outlook的正常使用。 正如我所提到的,我从来没有使用Office剪贴板。 旧的Windows剪贴板已经被我罚款了。 在我的代码中,我一直在努力清除复制/粘贴剪贴板,使用Excel.Application.CutCopyMode = False(或,只是Application.CutCopyMode = False)。 我认为这将防止干扰其他程序的任何问题,直到我们开始使用Office 2013,我没有看到任何问题。 但是,即使这将清除Windows剪贴板,它不会清除Office剪贴板。 我审查了许多网页试图find一种方法来清除Office剪贴板,他们都没有。 似乎清除Office剪贴板的能力已经从2000年以来一直没有了。我发现这是一个有用的参考,因为我试着在这里列出的代码和其他类似的变化来清除Office剪贴板,但他们都只清除Windows剪贴板: http://www.pcreview.co.uk/threads/vba-clear-clipboard.2237563/ 。 我希望这对其他可能有类似经验的人有帮助。

还有一件事…在Word中编辑时,我发现它工作正常,直到我在Excel VBA代码运行时复制一个数字(在Word中)。 在这一点上,Word变得没有反应。 由于我已经消除了剪贴板的所有使用,我重新检查了VBA代码,发现还有一些地方在执行Excel.Application.CutCopyMode = False。 我评论了所有这些路线并重复了testing。 现在使用Excel VBA运行,我可以在Word中进行编辑而不会产生干扰,包括复制/粘贴。

加载项。 禁用Word中的所有加载项。 现在我的Excel VBA可以运行一整天,而不会导致Word扼杀。 我已经做了一些试验,试图缩小哪些加载项。 我相信Acrobat PDFMaker Office Com Addin是罪魁祸首。 我已经看到,作为一个可能影响的VBA中试图研究这个问题,在我发布堆栈溢出这个问题之前。 我把这个加载项作为问题来源打了折扣,因为我们在Power Point中也包含了Acrobat PDFMaker; 当我在Word和Outlook中运行Excel VBA时,我没有观察到Power Point被“冻结”。 但是,在Outlook中禁用PDFMaker之后,它现在也变得干净,不再由执行VBA的Excel挂起。