2011-10-02 23 views
13

considerare le dichiarazioniVBA variabile/matrice valori predefiniti

Dim x As Double 
Dim avg(1 To 10) As Double 

Quali sono i valori di default in x e avg?

Attraverso test, voglio dire che x è inizializzato a zero. Allo stesso modo, voglio dire che tutti gli elementi in avg sono stati inizializzati a zero.

Tuttavia, posso scrivere codice che dipende da questo? O i valori di inizializzazione predefiniti sono effettivamente indeterminati?

risposta

14

Se si specifica un tipo di dati ma non si specifica un inizializzatore, Visual Basic inizializza la variabile sul valore predefinito per il relativo tipo di dati, che per tutti i tipi numerici è 0 (zero).

Quando si esegue una macro, tutte le variabili vengono inizializzate su un valore. Una variabile numerica viene inizializzata a zero, una stringa di lunghezza variabile è inizializzata su una stringa di lunghezza zero ("") e una stringa di lunghezza fissa è riempita con il codice ASCII 0. Le variabili di variante sono inizializzate su Vuoto. Una variabile vuota è rappresentata da uno zero in un contesto numerico e una stringa di lunghezza zero ("") in un contesto stringa.

Ref.

+0

Abbastanza sicuro è corretto. Si noti, tuttavia, che se si utilizzano gli array dinamici, nessun elemento viene inizializzato e il riferimento a arr (0) prima dell'impostazione esplicita restituisce un errore. – dmogle

+1

A parte, sono abbastanza sicuro (cercando SO) che non è possibile specificare un inizializzatore alla dichiarazione in VBA di Excel, dal momento che è una cosa .NET. Grazie per il Ref! Ciò dissipa totalmente ogni dubbio sul fatto che 'x' sia pari a zero. Anche se ogni elemento di un array fisso viene inizializzato a zero? In realtà avevo già scoperto che gli array dinamici non venivano inizializzati (solo assegnati) dopo la dichiarazione, e volevo solo assicurarmi che la dichiarazione di array fissi non si comportasse nello stesso modo. –

+0

@Prashant, perché non aggiungere un orologio alla variabile e provare da solo? – Reafidy

1

Sì, dovresti essere in grado di dipendere dal numero di tipi da inizializzare a 0 in VBA poiché questo è il loro valore predefinito.

Tuttavia, se ti preoccupa, e i valori iniziali sono così importanti, la mia raccomandazione è che ti assegnano solo il valore 0 (anche se davvero non ne hai bisogno).

4

È possibile scrivere il codice che dipende implicitamente sul valore di default di un determinato tipo di dati, ma questo non significa che hai sempre dovrebbe, perché non è così ovvio quello che stai facendo, che può confondere la prossima persona che legge il tuo codice (e quella persona potrebbe essere tu tra un anno).

Non si può sbagliare con l'assegnazione esplicita di un valore iniziale alle variabili. Se si vuole, si può fare sulla stessa linea, come la dichiarazione:

Dim x As Double: x = 0 

Certo, è un po 'più coinvolto per gli array, ma di solito c'è un posto comodo per inizializzare loro, più in basso nel codice, in cui li stai attraversando comunque.

Problemi correlati