2014-09-05 19 views
0

一點背景:可能在錯誤處理期間複製一行代碼?

我寫一些很基本的錯誤處理,運行一些非常重要的公司流程的宏。由於這裏沒有人是真正的軟件工程師,所以我們可以致力於編寫錯誤處理例程的時間並不重要。

無論如何,有一個例程每天晚上按計劃運行,它會處理一天中完成的多個報表(在Excel中)。這個例程大部分運行良好,但由於它發生在後臺,我無法知道在前一天晚上的更新中是否出現了問題,除非我每天早上都檢查它。

所以我現在所處的錯誤處理是錯誤 - 任何錯誤 - 它會向我發送一封電子郵件,說「嘿,出事了」(或其他事情)。這讓我意識到在其他部門看到它們之前彈出的任何間歇性錯誤,而不需要「直升機父母」系統,可以這麼說。

我的問題是: 我的頭腦中有這樣的幻想,在電子郵件中,它會有錯誤發生的行的文本。這不是最大的交易,但它會加快解決問題的一點點。

使用谷歌搜索這有點令人沮喪...有誰知道這是否可能,以及我會如何去做這件事?

+0

我不知道發送實際的線路,但您可以發送自己的線路號碼,只需在您自己的宏觀副本中查看。 – Ripster 2014-09-05 12:31:20

+0

我很想做到這一點,但不知道如何去做到這一點。 – 2014-09-05 13:02:24

+0

您可以在您的代碼中添加行號並使用Erl獲取行號。請參閱下面的答案。 :) – Ripster 2014-09-05 13:03:00

回答

0

您可以發送自己的行號,這樣你可以找到問題的行
行號可以很容易地利用MZ-工具

Sub ErrTest() 
10  On Error GoTo ErrHandler 
20  Range("Derp").Select 
30  On Error GoTo 0 

40  Exit Sub 

ErrHandler: 
50  Email "[email protected]", _ 
       Subject:="Error " & Err.Number, _ 
       Body:="Error " & Err.Number & "(" & Err.Description & ") occured in ErrTest on line " & Erl & "." 
End Sub 

您可以檢索行的代碼,如果你有「被添加信任訪問VBA項目對象模型「在信任中心進行檢查。

Sub Test() 
    Dim LineCount As Long 

    LineCount = ThisWorkbook.VBProject.VBComponents("Module1").CodeModule.CountOfLines 

    'Print every line in Module1 (lines 1 to LineCount) 
    Debug.Print ThisWorkbook.VBProject.VBComponents("Module1").CodeModule.Lines(1, LineCount) 
End Sub 

這可用於通過電子郵件發送自己的特定行號。您必須爲每行代碼添加行號並使用Erl才能使其工作。

+0

不幸的是,這將無法正常工作。手動添加數字的行數太多,而Mz-Tools與64位Office不兼容。 – 2014-09-05 13:03:29

+0

我在32位辦公室開發,因爲有太多的工具無法在64位版本中使用。但是我必須支持64位版本。你可以導出你的模塊到文本文件寫另一個程序來添加行號,然後再導入它們,雖然這是一個非常黑客的解決方案.. – Ripster 2014-09-05 13:12:07

+0

@ M.Banerjee順便說一句,NOtepadd ++的選項/插件TextFX將插入行號 – mrbungle 2014-09-05 14:56:42