【问题标题】:Can't make Application.DisplayAlerts = False in Excel 2016 VBA无法在 Excel 2016 VBA 中设置 Application.DisplayAlerts = False
【发布时间】:2017-08-19 06:12:11
【问题描述】:

我已经追了几个星期了,“谷歌搜索的时间比我想承认的要多。

我在 Excel 2016 电子表格中有一个大型、复杂的分析应用程序,它可以捕获 SQL 表数据、查询电子邮件数据并执行许多我认为非常酷的事情。用户可以看到销售人员自动化绩效指标和图表。一切都很好,除了一件事。我无法停止“保存数据?”无论我做什么,对话框都不会出现。

作为一种解决方法,我将电子表格放在网络上,并为用户提供了一个快捷方式,该快捷方式运行 VBscript 以将此电子表格复制到本地 PC 上的隐藏驱动器并运行它。因此,如果他们保存它,就不用担心,因为他们没有使用原始数据。但正如人们很容易想象的那样,加载时间必然比需要的时间长,当我告诉用户他们无法保存数据时,用户会被一条消息弄糊涂。

经过许多不同的实验,我似乎在 Excel 中发现了一个错误(是的,我知道,这对我来说听起来很蹩脚),因为我无法使 Application.DisplayAlerts = False。它只是不会采取。

在此处查看图片: enter image description here

上面的图片(或上面的链接,因为我还没有提交足够的问题来嵌入图片)显然是在我运行应用程序时从即时窗口中获取的。我按照显示的确切顺序输入了这些步骤。请注意,我设置了 Application.DisplayAlerts = False,然后立即检查该值,结果为 True。

很奇怪。这是一个错误吗?

最后一点可能无关紧要;我使用 .XLSB 格式是因为占用空间更小,加载时间更短,并且可以解决宏的 PC 设置问题。但我已切换回 .XLSX 以简化实验。

【问题讨论】:

  • 您不能将DisplayAlerts 在子外设置为false...这样即时窗口将永远不会显示真实值...但是您可以使用Stop 创建一个子并进行测试在潜艇停止时再次出现......它现在应该显示为假......但是一旦潜艇结束,它就会再次为真......
  • MSDN:If you set this property to False, Microsoft Excel sets this property to True when the code is finished, unless you are running cross-process code.msdn.microsoft.com/en-us/library/office/ff839782.aspx
  • 它也应该被包裹在EnableEvents = False...内,然后只要有任何子程序正在运行就不会弹出任何东西...
  • 我在 sub 中设置为 false 并且只是使用 imnmeidate 窗口来显示以方便解释。我读过有关“跨进程”的内容,但不知道具体是如何定义的。在 Workbook_Open() 中显示消息后,我将值设置为 false
  • 简而言之:只要不再运行子程序(没有 vba 代码处于活动处理中),该值将再次设置为 true...

标签: excel vba


【解决方案1】:

澄清一下:代码在调试器中的每个单步执行后都会暂时停止,导致 Excel 在空闲时将其设置回 True。以下是验证此行为的方法:

  1. 在 VBE 代码开发窗口中,打开即时窗口 (Ctrl-G)。
  2. 在您的例程中临时插入以下代码:

    Debug.Print "..."

    Application.DisplayAlerts = False

    Debug.Print "Application.DisplayAlerts:" & Application.DisplayAlerts

    停止

  3. 使用“Set Next Statement”工具(或 Ctrl-F9),将 Debug.Print "..." 语句设置为下一条一个来执行。

  4. 按 F5(继续)在此处运行代码表单。
  5. 您应该会在“立即”窗口中看到此内容:

    ...

    Application.DisplayAlerts: 假

  6. 现在,代码在 Stop 语句处停止,在“立即”窗口中键入“?Application.DisplayAlerts”,然后按 [Enter] 键。你会得到:

    ?Application.DisplayAlerts

    是的

    因为 Excel 在代码暂停时将其重置为 True

  7. 移除实验代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-29
    • 2019-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-01
    • 2016-08-16
    • 1970-01-01
    相关资源
    最近更新 更多