2015-11-20 91 views
0

Excel VBA代碼通過Application.OnTime Now + TimeSerial(x,x,x)運行重複循環,這是一個長期未解決的問題。用戶會發現他們的代碼在幾天內運行良好,可能會或可能不會神祕地停止。隨機斷點未知的原因

我正面臨着這樣的情況,希望能夠解決它。我已經閱讀了30多個論壇答案,其中一些是由有經驗的開發人員撰寫的,並且達成了這一理解我的結論和問題如下。

的結論是,Excel的隨機進入一個break mode但爲什麼發生這種情況時,更是這樣,爲什麼它是隨機發生,沒有人知道的原因

那麼我們應該得出結論:實際上這是隨機發生的嗎?而且Excel VBA不像其他語言那麼強大。

一些注意事項:

  1. 我知道這可以按Ctrl+Break兩次來解決。這並不能解釋爲什麼我們必須首先做到這一點。
  2. 我意識到這個錯誤是獨立於代碼的。它會發生在簡單的和涉及的程序中。
  3. 嘗試了多種方法來模擬這個錯誤,我的意思是很多 - 多個ADODB SQL連接和查詢,宏運行時使用多個單元格編輯Application.OnTime遞歸調用,我無法複製該錯誤。它確實是隨機的。
  4. 我只運行一個工作簿和一個Excel實例。
  5. 有人說,對於我們在調試中所做的每個斷點,斷點仍保留在內存中。然後當我們將來運行一個宏時,寫入這部分內存會觸發這個隨機中斷。這一個似是而非的解釋,並確實得出結論,這個錯誤是隨機的。我們無法檢查VBA中的內存。

即使不是爲了解決這個問題,我也需要一些東西來證明我的老闆。

+1

對於在當前會話期間或在該工作簿期間以前沒有按下過「Ctrl + Break」的用戶,這是發生了什麼? –

+0

當我在當前會話或該工作簿中按Ctrl + Break時,無法確定是否遇到此錯誤。 1.如果答案是肯定的,那麼在運行代碼之前按Ctrl + Break,它仍然是一個隨機錯誤。 2。如果答案爲否,在運行代碼之前用戶不知道Ctrl + Break是否被按下,它仍然是一個隨機錯誤。 我在質疑它的隨機性和它的原因。 –

回答

0

我解決了這個錯誤!我之前沒有閱讀過這個問題的答案,所以Excel社區收到這個是關鍵。

Excel無法在發生這種情況時在Application OnTime隊列中調用其子例程。您已經開始編輯單元格,保持編輯模式,然後通過最小化窗口或單擊另一個窗口切換到Excel。

Application OnTime隊列中的所有子例程將等待,直到單元格完成編輯。所以一旦你切換回Excel,單元格關閉編輯模式,然後所有的子例程都會運行。

我其實很印象我自己解決了這個問題。