2017-06-02 42 views
0

非常標題。代碼前進,直到它碰到一條線,然後作用,就好像它遇到了Stop命令,除了沒有這樣的行。VBA停止沒有代碼告訴它這樣做

StartDate = DateAdd("d", -1 * NDays + 1, EndDate) 'the immediately preceding line 
'NDays is an integer, EndDate is a date 

With Excel.Application 'the line that it stops on 
    .ScreenUpdating = True 
    .DisplayAlerts = True 
    .Calculation = xlAutomatic 
End With 'I put these here because the next lines save the workbook 
    'if I put them before the excel.application stuff it asks if I want to save when closing 

爲什麼它停在第二行?有人知道嗎?

+0

格雷厄姆,期待這段代碼我假設你只發布了它的一部分?如果不是的話,那裏有一個End With ... –

+0

無論如何,我認爲我們需要With語句中的整個代碼,因爲它只是鏈接到Excel.Application的一個包裝。也許可以多解釋一下代碼如何處理新打開的Excel實例,以及它是否等待任何操作在Excel中結束。應用 –

+0

我剛剛發佈了兩個問題行。沒有奇怪的停止,整個事情很好(即沒有缺失的位),它只是停止。如果需要,我可以發佈更多。 –

回答

0

嘗試沒有with block的情況,看看會發生什麼。因此,像:

Application.Screenupdating = True 
Application.DisplayAlerts = False 
Application.Calculation = xlCalculationAutomatic 

我在爲爲什麼這背後虧損(如果有誰知道,請不要共享),但我已經遇到的問題與實例化新的應用程序和結果的代碼在使用新實例並且簡單地關閉時表現出相同的行爲。

如果我冒險猜測,我會認爲它與Excel如何管理VBA進程有關。這是可能的(儘管我可能完全錯誤),新的應用程序流程會採取控制措施,並且這會導致第一個應用程序(以通俗的說法)假定它已完成,然後退出。或者它暫停自己的進程(如DoEvents命令),但無法恢復。再次,這些都是猜測。

另外,爲什麼'Excel.Application'?你正在創建一個名爲Excel的新實例嗎?如果您打算只使用應用程序,則代碼僅在我們的「應用程序」中運行。

+0

這將是很難測試,因爲現在它神祕停止給我的問題。當我發佈這個問題時,我多次運行它,並且每次它給我同樣的問題,但是現在運行它兩次,它沒有經過任何問題(如果它再次彈出,我會嘗試它並看看會發生什麼) 。至於Excel.Application,我使用它,因爲......嗯,我只是總有。我想沒有理由把額外的位放在前面。如果我把它放在那裏,它會減慢代碼的運行速度還是會導致潛在的問題? –

+0

要回答你的問題,如果它減慢代碼或導致問題...... *技術上*(這在技術上是巨大的)...是的。原因是Excel必須解決,然後解決應用程序。默認情況下,隱式應用程序是Excel應用程序。它是否應該引起任何問題?可能不會。它可以?一切皆有可能。我還沒有看到其他開發人員使用Excel.Application,但是(C#之外),所以我建議使用Application。這樣你的代碼更容易閱讀和維護(並且可能避免這些問題)。 –

相關問題