2016-08-01 159 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. 刪除實驗代碼。