2015-09-07 17 views
10

In VBA, farebbe alcuna differenza se confronto una stringa, o simile, contro vbNullString anziché contro una stringa vuota; ""? Se sì quali differenze ci sono tra i due?C'è qualche differenza tra vbNullString e ""?

+0

Vedi il commento di Rob Bovey su http://dailydoseofexcel.com/archives/2008/06/26/identify-empty-cells-in-vba/ – brettdj

risposta

8

vbNullString e "" sono diversi. Questo è un esempio di pagina web che descrive le differenze di utilizzo della memoria.


"Questo è il solito modo per cancellare una variabile stringa.

Text$ = "" 

Che spreco! Prima di tutto, la stringa "" prende 6 byte di RAM ogni volta che lo si utilizza. Si consideri il alternative:?.

Text$ = vbNullString 

Allora, qual è questo vbNullString è una costante VB speciale che denota una stringa nulla Il "" letterale è una st vuoto squillare. C'è una differenza importante. Una stringa vuota è una vera stringa. Una stringa nulla non lo è. È solo uno zero. Se conosci il linguaggio C, vbNullString equivale a NULL.

Per la maggior parte dei casi, vbNullString equivale a "" in VB. L'unica differenza pratica è che vbNullString è più veloce da assegnare ed elaborare e richiede meno memoria.

Se si chiama qualche API o componente VB, provare le chiamate con vbNullString prima di distribuire l'applicazione. La funzione che stai chiamando potrebbe non controllare una stringa NULL, nel qual caso potrebbe bloccarsi. Le funzioni non VB dovrebbero verificare NULL prima di elaborare un parametro stringa. Con sfortuna, la particolare funzione che stai chiamando non lo fa. In questo caso, utilizzare "". Di solito le API supportano vbNullString e possono anche funzionare meglio con essa "


Il resto di questo articolo contiene ulteriori informazioni sulle stringhe di ottimizzazione che possono essere penetranti e

pagina web completa:. http://www.aivosto.com/vbtips/stringopt.html

3

This comparison afferma che l'assegnazione di "" a una variabile utilizza 6 byte di memoria mentre l'utilizzo di vbNullString non utilizzerà alcuna memoria.

Personalmente, preferisco valutare la lunghezza di una stringa. Se la lunghezza è 0, arriviamo anche alla conclusione che la stringa è vbNullString o "". Questo metodo è accettato come il metodo più rapido di verifica di uno vbNullString.

If Len(string) = 0 Then 

Si può leggere un Len vs vbNullString vs "" confronto here.

+0

Sembra buono, a meno che qualcun altro non suoni con più informazioni, contrassegnerò questo come soluzione. Tuttavia, l'ultimo articolo che hai collegato indica che c'è una differenza, sebbene l'autore lo faccia non so cosa sia.Ovviamente potrebbe essere qualcosa di semplice come la memoria che occupa quando assegnato a una variabile, come si indica in precedenza nella risposta. – eirikdaude

+1

C'è una differenza, '" "' è una stringa esistente di lunghezza zero, 'vbNullString' è un puntatore nullo di tipo' String' (non punta a una stringa). Allo scopo di confrontare VB [nasconde la differenza] (http://stackoverflow.com/questions/37035754/what-does-vb6-initialize-a-static-integer-to/37035879#comment61678413_37035879), ma a volte si desidera [scoprilo] (http://stackoverflow.com/a/20909528/11683). – GSerg

Problemi correlati