【问题标题】:excel 2013 vba conflicts with other office programsexcel 2013 vba 与其他办公程序冲突
【发布时间】:2016-04-16 00:20:44
【问题描述】:

我们公司大约在 6 个月前升级到办公室 2013。我有导入 CSV 文件、执行计算和更新图表的预先存在的代码。自 2013 年升级以来,在运行 Excel VBA 代码时,其他 Office 2013 程序(例如 Word、Outlook)在 VBA 代码完成之前对鼠标或键盘输入无响应。有趣的是,PowerPoint 似乎没有受到影响。在我的 VBA 代码中,我使用了典型的加速技术:application.windowstate=xlMinimized,使用手动计算,并关闭屏幕更新。我在堆栈溢出 (Application.Screenupdating = false affects all of office) 中遇到一页,表明屏幕更新设置为 false 是一个潜在问题。我尝试按照该链接和许多其他人的建议来修改我的代码,以便在宏运行时 Word 和 Outlook 仍然有效。这包括使用“Excel”。前缀(例如,Excel.Application.ScreenUpdating=False),使窗口最大化,使用“Excel.Application.Windows(ThisWorkbook.Name).WindowState =xlMinimized,等等。我没有尝试过消除 Excel VBA 对其他Office应用程序。我从根本上不明白为什么Office(显然)如此交织在一起,以至于一个应用程序会对其他应用程序产生不利影响。我在Office 2010或更早版本中没有看到这种影响。任何有用的见解将不胜感激。

【问题讨论】:

  • 您是否关闭了 Office 2013 安装中默认打开的所有“花里胡哨”的废话? Alt+F,T 然后关闭动画、翻页和其他与计算数字无关的操作。
  • 我查看了 Excel 选项,没有看到任何关于动画的内容。在高级选项下,我禁用了硬件图形加速。此外,在控制面板/轻松访问中心/更容易专注于任务/我选择了关闭所有不必要的动画。我也试过关闭多线程。无济于事。问题(请原谅我的无知):如果 VBA 正在运行并且屏幕更新设置为 false - 为什么涉及用户界面的花里胡哨会造成任何影响?谢谢!

标签: excel ms-office vba


【解决方案1】:

经过相当多的调试后,我终于意识到为什么我的 VBA 代码会阻止 Word/Outlook 中的响应。我从不使用 Office 剪贴板,但由于某种原因,我在 Excel 中工作时在 Word 中打开它,并看到有复制数据的证据,包括图表。尽管我之前已经清理了代码以尝试消除复制/粘贴(即使用剪贴板),但有两个区域没有这样做。两者中更难改变的是图表更新领域。由于懒惰,我开发了图表更新代码,它始终需要在嵌入图表所在的页面上至少有一个预先存在的图表。我使用的技术是复制顶部图表,删除页面上的所有图表,将复制的图表粘贴到顶部位置,然后将其复制到所有图表位置。然后代码运行以重新映射工作表中的源数据和所有要绘制的数据。我修改了代码以删除除第一个图表之外的所有图表,然后复制。这避免了使用.Copy。一旦我清理了剪贴板的所有使用,我就能够在 Excel 中运行 VBA 代码,而不会干扰 Word 或 Outlook 的正常使用。 正如我所提到的,我从来没有使用过 Office 剪贴板。旧的 Windows 剪贴板对我来说很好。在我的代码中,我一直在努力使用 Excel.Application.CutCopyMode = False(或者,只是 Application.CutCopyMode = False)在复制/粘贴后清除剪贴板。我认为这可以防止任何与干扰其他程序有关的问题,在我们开始使用 Office 2013 之前,我没有发现任何问题。但是,即使这会清除 Windows 剪贴板,也不会清除 Office 剪贴板。我查看了许多网页,试图找到一种清除 Office 剪贴板的方法,但都没有。似乎自 2000 年以来清除 Office 剪贴板的能力已经消失。我发现这是一个有用的参考,因为我尝试了此处列出的代码和其他类似的变体来清除 Office 剪贴板,但它们都只清除 Windows 剪贴板: http://www.pcreview.co.uk/threads/vba-clear-clipboard.2237563/。 我希望这对可能有类似经历的其他人有所帮助。

还有一件事...在 Word 中编辑时,我发现它工作正常,直到我在 Excel VBA 代码运行时复制了一个图形(在 Word 中)。此时,Word 再次变得无响应。由于我已经消除了对剪贴板的所有使用,我重新检查了 VBA 代码,发现仍然有执行 Excel.Application.CutCopyMode = False 的地方。我注释掉了所有这些行并重复了测试。现在随着 Excel VBA 的运行,我可以在 Word 中进行编辑而不受干扰,包括复制/粘贴。

【讨论】:

  • 好吧,我错了。还是有问题。我的主工作簿将处理用户选择的列表中的一组 CSV 文件。有一段时间,VBA 似乎没有引起问题。处理完每个 CSV 文件后,程序会使用 .saveas 保存(模板)工作簿,并使用 CSV 基本文件名对其进行重命名。我怀疑这可能是锁定开始的地方。但是一旦 Word 被锁定,在 VBA 代码完成之前,Word 将不会重新获得窗口焦点。我真的很困惑。
【解决方案2】:

加载项。禁用 Word 中的所有加载项。现在我的 Excel VBA 可以运行一整天而不会导致 Word 卡顿。我做了一些实验来尝试缩小哪些加载项。我相信 Acrobat PDFMaker Office Com Addin 是罪魁祸首。在我在 Stack Overflow 上发布这个问题之前,我已经看到它在尝试研究这个问题时被引用为可能影响 VBA。我认为这个加载项是问题来源,因为我们在 Power Point 中也包含了 Acrobat PDFMaker;并且我没有观察到 Power Point 在运行 Excel VBA 时像在 Word 和 Outlook 中那样被“冻结”。但是,在 Outlook 中禁用 PDFMaker 后,它现在看起来也很干净,不再被 Excel 执行 VBA 挂起。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-23
    • 1970-01-01
    • 2014-08-17
    相关资源
    最近更新 更多