2011-12-07 40 views
8

Trong Excel VBA, thực tiễn tốt là để lại các hướng dẫn Debug.Print trong mã đi vào "sản xuất"? Đó là khá hữu ích để gỡ lỗi các tờ thời gian thực tại máy của người dùng khi có sự cố. Liệu nó ảnh hưởng đến hiệu suất khi Visual Studio được đóng lại? Nếu không, bạn sẽ tư vấn cho điều gì?Thực tiễn tốt là để lại hướng dẫn "Debug.Print" trong mã đi vào "sản xuất"?

+0

bạn nói "Visual Studio" nhưng bạn đang nói về VBA, phải không? Bạn có nghĩa là VBE? – aevanko

+0

Ahhh, vâng tôi đoán tôi chỉ hiểu những gì mọi người gọi là VBE bây giờ ... Có, tôi đoán vậy :) [ALT + F11] – Jerome

+0

1) Nếu điều quan trọng là nắm bắt những gì người dùng đang làm khi mọi thứ đã xảy ra, nhật ký giao dịch sẽ thấy một lựa chọn tốt hơn. Bắt đầu một tệp mới cho mỗi lần chạy hoặc mỗi ngày; xóa bất kỳ hơn 48 giờ cũ. Có một chi phí hiệu suất nhưng làm thế nào bạn sẽ đo lường nó. 2) Visual Studio là môi trường phát triển của MS cho các ngôn ngữ chuyên nghiệp của nó. VB 2010 nhanh hơn hàng trăm lần so với VBA/VBE và có hàng ngàn cơ sở thú vị. Bạn có thể truy cập Excel từ nó nếu bạn muốn sử dụng một bảng tính. –

Trả lời

21

Gỡ lỗi.Hướng dẫn in Có chi phí hiệu suất nhỏ. Vì vậy, tôi sẽ tránh chúng trong vòng lặp được thực hiện một tỷ lần. Ngoại trừ những trường hợp đó, tôi nghĩ sẽ ổn thôi.
Bạn cũng có thể sử dụng chỉ thị biên dịch có điều kiện (#if) kết hợp với hằng số trình biên dịch (#const) để bật/tắt chúng trên toàn cầu mà không ảnh hưởng đến hiệu suất.

#CONST developMode = True 

sub Xyz 
    #If developMode Then 
    Debug.Print "something" 
    #End If 
End Sub 
+2

@iDevelop +1 Tìm hiểu điều gì đó mới mỗi ngày - không nhận ra Excel hỗ trợ biên dịch có điều kiện! Cảm ơn. – dash

+0

có vẻ thú vị, cảm ơn! – Jerome

+0

Xóa đủ để nhận +1 +1 :). Btw, biên dịch có điều kiện (và một số công cụ hữu ích khác) đã được thảo luận trong chủ đề thú vị này: http://stackoverflow.com/questions/1070863/hidden-features-of-vba – JMax

4

Tôi thường có hai phiên bản; prod mà không gỡ lỗi, và prod với gỡ lỗi. Điều đó, kết hợp với việc ghi nhật ký xử lý lỗi catchall, có nghĩa là nếu người dùng gặp vấn đề, tôi có thể triển khai phiên bản gỡ lỗi cho họ và họ có thể chạy nó.

Tôi có macro mà tôi chạy các nhận xét đó trong các câu lệnh debug.print, do đó, nó không phải là chi phí bảo trì thực.

Sự cố khi chạy phiên bản gỡ lỗi mọi lúc (và, với Excel VBA thường không phải là điều hiệu suất) là ứng dụng của bạn liên tục phát ra thông tin không cần thiết. Trong một môi trường với các bảng tính được kiểm soát, ví dụ, điều này có thể được coi là một điều xấu.

Về xử lý lỗi toàn cầu, bạn vẫn cần On Error GoTo tuyên bố cho mọi chức năng mà bạn muốn xử lý lỗi trong Bạn có thể, tuy nhiên, đường ống này để một chức năng chung:.

Public Function HandleTheNastyErrors(E As ErrObject, ByVal writeLog As Boolean = True) 

    Select Case E.Number 

    Case xxx 

     ...specific error handling... 

    Case Else 
     ... Display a message to the user about how you dont know what happened....    
    End Select 

    If writeLog Then 

     ...Log Writing Code... 

    End If 

End Function 

Và sau đó, onerror:

ErrorHandler: 
Call HandleTheNastyErrors(Err, True) 

hiện làm các trick

+0

Bạn có thể nhận xét về "bắt tất cả" của mình không? Tôi không thực sự có ý tưởng về cách xử lý lỗi một cách thông minh và bằng cách nào đó một cách tổng quát cho đến nay. Cảm ơn ! – Jerome

+0

@jeromeG Có bạn đi. Hy vọng nó giúp. – dash

+0

truyền đối tượng lỗi nó tới functon ... đó là một ý tưởng thú vị. –

Các vấn đề liên quan