2011-12-07 9 views
8

In Excel VBA, è buona norma lasciare le istruzioni Debug.Print nel codice che va in "produzione"? Questo è molto utile per eseguire il debug dei fogli in tempo reale sulla macchina dell'utente quando qualcosa va storto. Influisce sul rendimento quando Visual Studio è chiuso? Se no, cosa consiglieresti?È buona norma lasciare istruzioni "Debug.Print" nel codice che va in "produzione"?

+0

Tu dici "Visual Studio", ma si parla di VBA, giusto? Intendi VBE? – aevanko

+0

Ahhh, sì, immagino di capire cosa le persone chiamano VBE ora ... Sì, immagino di sì :) [ALT + F11] – Jerome

+0

1) Se è importante catturare ciò che l'utente stava facendo quando le cose andavano male, un log delle transazioni avrebbe visto un'opzione migliore. Inizia un nuovo file per corsa o al giorno; cancellare qualsiasi oltre 48 ore di vita. Sì, c'è un costo in termini di prestazioni, ma come lo misureresti? 2) Visual Studio è l'ambiente di sviluppo di MS per i suoi linguaggi professionali. VB 2010 è centinaia di volte più veloce di VBA/VBE e ha migliaia di fantastici servizi. È possibile accedere a Excel da esso se si desidera utilizzare un foglio di lavoro. –

risposta

21

L'istruzione di debug.Print DO ha un piccolo costo di prestazioni. Quindi li eviterei in loop che vengono eseguiti un milione di volte. Tranne quei casi, penso che sia giusto tenerli.
È anche possibile utilizzare le direttive di compilazione condizionale (#if) in combinazione con una costante del compilatore (#const) per abilitarle/disabilitarle globalmente senza impatto sulle prestazioni.

#CONST developMode = True 

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

@iDevelop +1 Scopri qualcosa di nuovo ogni giorno - non realizza la compilazione condizionale supportata da Excel! Grazie. – dash

+0

che sembra interessante, grazie! – Jerome

+0

Abbastanza chiaro per desservare un +1 :). Btw, la compilazione condizionale (e alcune altre cose utili) è stata discussa in questo thread interessante: http://stackoverflow.com/questions/1070863/hidden-features-of-vba – JMax

4

Di solito ho due versioni; prod senza debugging e prod con debugging. Ciò, combinato con la registrazione del gestore errori di catchall, significa che se un utente presenta problemi, posso distribuire la versione di debug a loro e possono eseguirla.

Ho una macro che eseguo i commenti fuori dalle istruzioni debug.print, quindi non è un vero e proprio sovraccarico di manutenzione.

Il problema con l'esecuzione di una versione di debug tutto il tempo (e, con Excel VBA non è di solito una cosa di prestazioni) è che la tua app è costantemente l'emissione di informazioni che non ha bisogno anche. In un ambiente con fogli elettronici controllati, ad esempio, questo può essere visto come una cosa negativa.

In termini di gestione degli errori globale, è ancora necessario l'errore dichiarazione su Goto per ogni funzione che si desidera la gestione degli errori in È possibile, tuttavia, tubo di questi per una funzione comune:.

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 

E poi, OnError:

ErrorHandler: 
Call HandleTheNastyErrors(Err, True) 

Visualizza fare il trucco

+0

Potresti commentare il tuo "catch all"? Non ho davvero idee su come gestire gli errori in modo intelligente e in qualche modo genericamente finora. Grazie ! – Jerome

+0

@jeromeG Ecco qua. Spero che sia d'aiuto. – dash

+0

passando l'oggetto errore stesso al functon ... questa è un'idea interessante. –

Problemi correlati