【发布时间】: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...