2016-08-01 162 views
0

我一直在追逐我的尾巴了几个星期,有更多时间“周围的Googling比我不想承认。不能使Application.DisplayAlerts =假在Excel 2016 VBA

我有内一个大型的,复杂的分析应用一个Excel 2016电子表格,捕捉SQL表格数据,查询电子邮件数据,并做了很多我认为非常酷的东西,用户可以看到销售人员自动化性能指标和图表,除了一件事情之外,一切都很好,我无法停止“保存数据?“对话框出现不管我做什么

作为一种解决方法,我已经把电子表格放在网络上,给予用户一个运行VBscript的快捷方式来将这个电子表格复制到隐藏的驱动器上本地P C并运行它。所以如果他们保存它,不用担心,因为他们不处理原始数据。但正如人们容易想象的那样,当我告诉他们他们不能保存数据时,加载时间必然超过它的需要,并且用户被消息弄糊涂了。

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

见的形象在这里: enter image description here

以上(或在我还没有提交足够的问题尚未插入图片上面的链接)从即时窗口当我运行应用程序显然是拍摄的图像。我按照显示的顺序进入了步骤。请注意,我设置了Application.DisplayAlerts = False,然后在后面检查了值并且它是True。

非常奇怪。这是一个错误?

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

+0

你不能在子外面设置DisplayAlerts为false ...这种方式下,直接窗口永远不会显示真正的值......但是你可以用Stop来创建一个子然后再次测试而子是在停止...它现在应该显示错误...但一旦子结束,它将再次为真... –

+0

MSDN:'如果您将此属性设置为False,Microsoft Excel将设置此属性当代码完成时为True,除非您正在运行跨进程代码.' https://msdn.microsoft.com/en-us/library/office/ff839782.aspx – cyboashu

+0

此外,它应该被封装在一个'EnableEvents = False' ...那么只要任何子文件正在运行,就不会弹出... –

回答

0

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

  1. 在VBE代码开发窗口中,打开立即窗口(Ctrl-G)。
  2. 暂时的地方插入下面的代码在你的日常:

    Debug.Print “...”

    Application.DisplayAlerts =假

    Debug.Print “Application.DisplayAlerts:” &应用.DisplayAlerts

    停止

  3. 使用“设置下一条语句“工具(或Ctrl-F9),将设置为Debug.Print”...“语句作为下一个要执行的语句。

  4. 按F5运行代码表单(继续)。
  5. 你应该可以看到这个显示立即窗口:

    ...

    Application.DisplayAlerts:假

  6. 现在,代码停在停止声明,键入“ ?立即窗口中的“Application.DisplayAlerts”,然后按[Enter]键。您将获得:

    Application.DisplayAlerts

    因为Excel有其重置为在代码暂停。

  7. 删除实验代码。