2008-11-21 59 views
3

我(不幸地)在Excel 2000 VBA中開發應用程序。我相信我發現在Custom Class屬性,函數或子調試中引發的任何錯誤,就好像錯誤是在調用屬性的VBA代碼中引發的那樣。也就是說,VBE調試器不會將我帶到發生錯誤的Class屬性中的位置,而是首先輸入屬性的位置(例如,從Module Sub或Function中)。這使得開發任何超過最淺的OO Excel 2000 VBA代碼,因爲我必須通過每個Class方法一行一行地發現導致錯誤的指令。在類調試中引發的錯誤如同在屬性調用中引發

我錯過了什麼,或者這是一個我必須在Excel 2000中處理的已知錯誤?這是在2003年還是2007年修復的?

示例代碼:

''''''''''''''' 
'In Module1: 

Public Sub TestSub1() 
    Dim testClass As Class1 
    Dim testVariant As Variant 
    Set testClass = New Class1 
    testVariant = testClass.Property1 'Debugger takes me here... 
End Sub 

'''''''''''''' 
' In Class1 

Property Get Property1() As Variant 
    Err.Raise 666, , "Excel 2000 VBA Sux!" 'But error is actually thrown here. 
End Property 

回答

4

的不同對於Office 2003,你會得到這種行爲時調試器被配置爲中斷未處理的錯誤(默認配置)。

如果您希望它在Err.Raise行中斷開,您需要將其配置爲中斷所有錯誤(工具/選項/常規/錯誤捕獲/關於所有錯誤的中斷)。

我相信這是相同的Office 2000,但沒有副本檢查。

0

這種「功能」是在Excel 2003中相同,我會感到驚訝,如果它在2007年

+0

這個'功能'聽起來更像是一個鼓勵Visual Studio購買的策略。勒嘆。謝謝! – 2008-11-21 04:46:27

+0

我認爲微軟故意忽略了VBA大約10年,贊成.Net等。他們只是沒有獲得VBA在日常業務中增加的價值。 – dbb 2008-11-21 04:49:54

+0

這是相同的功能。事實上這是相同的代碼。已經有大約十年了。似乎有太多的穩定性這樣的事情。 – 2008-11-21 21:13:30

0

同樣仍持有在Excel 2010中真正的 - 這就是我遇到了這個問題。

引述Chip Pearson's site

是絕對沒有理由使用錯誤捕獲以外的設置磨合類模塊。

他的錯誤模式之間的差異說明:

當您在測試並運行你的代碼,你有三個錯誤捕獲模式。首先是打破所有錯誤。如果發生任何錯誤,這將導致調試器打開,無論您在代碼中可能有哪些On Error處理。第二個選項是Break On Unhandled Errors。如果錯誤不是由現有的On Error指令處理的話,這將導致調試器打開。這是最常用的選項,並且是默認設置。第三個選項,Break In Class Module是最重要和最少使用的。這不是默認的錯誤捕獲模式,所以您必須手動設置它。

Break In Class Module是最重要的,因爲它會導致調試器中斷實際導致問題的對象模塊內的代碼行。 Break In Class模塊設置位於Tools菜單中的Options對話框中。它位於選項對話框的常規選項卡上,如下所示。

相關問題